Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: перебор массива начиная с заданного элемента
 
 автор: victoor   (20.09.2007 в 12:04)   письмо автору
 
 

Здравствуйте!
У меня есть ассоциативный массив, полученый из БД..
примерно в середине массива есть элемент с индексом "Общие права".
Подскажите, как сделать перебор массива начиная с элемента, идущего после элемента с индексом "Общие права". Заранее количество элементов, идущих до заданного неизвестно, так же как и количество идущих после... (структура базы будет изменяться (появляться новые поля), поэтому нехотелось бы каждый раз менять что-то в коде..)

Заранее спасибо за ответ.

   
 
 автор: cheops   (20.09.2007 в 12:07)   письмо автору
 
   для: victoor   (20.09.2007 в 12:04)
 

Перебирать придётся все элементы - это одна из особенностей ассоциативных массивов.

   
 
 автор: victoor   (20.09.2007 в 12:53)   письмо автору
 
   для: cheops   (20.09.2007 в 12:07)
 

жаль..
Я думал, как-то можно установить указатель в массиве на нужный элемент, не перелистывая все, а потом уже each() читать все следующие элементы...

   
 
 автор: Thrasher   (20.09.2007 в 12:20)   письмо автору
 
   для: victoor   (20.09.2007 в 12:04)
 

А разве элементы в ассоциативном массиве упорядочены?

   
 
 автор: victoor   (20.09.2007 в 12:54)   письмо автору
 
   для: Thrasher   (20.09.2007 в 12:20)
 

>А разве элементы в ассоциативном массиве упорядочены?
каким-то образом - да, ведь когда вы прогоняете массив через foreach(), то они идут всегда в одном и том же порядке...

   
 
 автор: Unreal   (20.09.2007 в 13:45)   письмо автору
 
   для: victoor   (20.09.2007 в 12:04)
 

так какая все же задача? получить один какой то элемент и вывести его?

не проще ли тогда с помощью sql запроса получать только то что надо, вместо того чтобы перебирать данные?

   
 
 автор: victoor   (20.09.2007 в 14:00)   письмо автору
 
   для: 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['права']['добавление рецептов']=='запрещено';

Поскольку в результате расширения функций сайта могут появится новые поля с правами доступа, то хотелось бы составить такую функцию, в которую бы не были жестко забиты все возможные права...

   
 
 автор: Loki   (20.09.2007 в 14:07)   письмо автору
 
   для: victoor   (20.09.2007 в 14:00)
 

Сделайте два запроса: один для авторизации, другой для получения настроек пользователя. Второй, ясный пень, будет выполняться только в случае успешной авторизации.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования