|
|
|
| Здравствуйте!
У меня есть ассоциативный массив, полученый из БД..
примерно в середине массива есть элемент с индексом "Общие права".
Подскажите, как сделать перебор массива начиная с элемента, идущего после элемента с индексом "Общие права". Заранее количество элементов, идущих до заданного неизвестно, так же как и количество идущих после... (структура базы будет изменяться (появляться новые поля), поэтому нехотелось бы каждый раз менять что-то в коде..)
Заранее спасибо за ответ. | |
|
|
|
|
|
|
|
для: victoor
(20.09.2007 в 12:04)
| | Перебирать придётся все элементы - это одна из особенностей ассоциативных массивов. | |
|
|
|
|
|
|
|
для: cheops
(20.09.2007 в 12:07)
| | жаль..
Я думал, как-то можно установить указатель в массиве на нужный элемент, не перелистывая все, а потом уже each() читать все следующие элементы... | |
|
|
|
|
|
|
|
для: victoor
(20.09.2007 в 12:04)
| | А разве элементы в ассоциативном массиве упорядочены? | |
|
|
|
|
|
|
|
для: Thrasher
(20.09.2007 в 12:20)
| | >А разве элементы в ассоциативном массиве упорядочены?
каким-то образом - да, ведь когда вы прогоняете массив через foreach(), то они идут всегда в одном и том же порядке... | |
|
|
|
|
|
|
|
для: victoor
(20.09.2007 в 12:04)
| | так какая все же задача? получить один какой то элемент и вывести его?
не проще ли тогда с помощью sql запроса получать только то что надо, вместо того чтобы перебирать данные? | |
|
|
|
|
|
|
|
для: Unreal
(20.09.2007 в 13:45)
| | нет, не проще.. видимо, я неправильно написал, или непонятно..
Есть таблица:
CREATE TABLE `люди` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`имя` varchar(16) NOT NULL COMMENT 'имя пользователя',
`пароль` char(32) NOT NULL COMMENT 'пароль пользователя в двойном md5()',
`статус` enum('не активирован','пользователь','союзник','соклан','Глава клана','Администратор сайта') NOT NULL DEFAULT 'не активирован' COMMENT 'статус пользователя',
`дата регистрации` datetime NOT NULL COMMENT 'Дата регистрации пользователя',
`последний вход` datetime NOT NULL COMMENT 'время последнего входа',
`e-mail` varchar(255) DEFAULT NULL COMMENT 'e-mail пользователя',
`e-mail от клана` set('да','нет') NOT NULL DEFAULT 'нет' COMMENT 'мыло пользоветеля в данном домене?',
`ICQ` varchar(15) DEFAULT NULL COMMENT 'ICQ пользователя',
`общие права` char(1) NOT NULL DEFAULT '0' COMMENT 'общие права пользователя',
`просмотр скрытых локаций` set('запрещено','разрешено') NOT NULL DEFAULT 'запрещено' COMMENT 'разрешено ли просмотр локаций со статусом "скрытая"',
`добавление чемпионов` set('запрещено','разрешено') NOT NULL DEFAULT 'запрещено' COMMENT 'разрешено ли дополнять таблицы чемпионов, кубков, штурмов',
`редактирование чемпионов` set('запрещено','разрешено') NOT NULL DEFAULT 'запрещено' COMMENT 'разрешено ли редактирование таблицы чемпионов, кубков, штурмов',
`просмотр рецептов` set('запрещено','разрешено') NOT NULL DEFAULT 'запрещено' COMMENT 'разрешено ли просматривать рецепты',
`добавление рецептов` set('запрещено','разрешено') NOT NULL DEFAULT 'запрещено' COMMENT 'разрешено ли добавление сведений о рецептах',
`редактирование рецептов` set('запрещено','разрешено') NOT NULL DEFAULT 'запрещено' COMMENT 'разрешено ли редактирование сведений о рецептах',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Список пользователей сайта';
|
она получается из базы данных, создается ассоциативный массив, с первыми полями (идущими до `общие права`) производятся какие-то действия, проверяется пароль и т.д. значение поля `общие права` переносится в элемент массива $_SESSION['права']['общие']
элементы полученного из БД массива, расположенные после поля `общие права` все переходят в многомерный массив $_SESSION['права'], расположенные до - не трогаются..
т.е. получается:
$_SESSION['права']['общие']=='1';
$_SESSION['права']['просмотр скрытых локаций']=='разрешено';
...
$_SESSION['права']['добавление рецептов']=='запрещено';
Поскольку в результате расширения функций сайта могут появится новые поля с правами доступа, то хотелось бы составить такую функцию, в которую бы не были жестко забиты все возможные права... | |
|
|
|
|
|
|
|
для: victoor
(20.09.2007 в 14:00)
| | Сделайте два запроса: один для авторизации, другой для получения настроек пользователя. Второй, ясный пень, будет выполняться только в случае успешной авторизации. | |
|
|
|