Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вопрос по ассоциативным массивам

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Suspended
Отправлено: 20 Мая, 2009 - 02:05:45
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




Актуально для PHP5 и только него.
Для примера возьмём вот этот массив: $arr = array ('a' => 1, 'b' => 10, 'c' => -1);
1) Я правильно понимаю, что порядок следования элементов жестко задан? выполняя foreach по массиву, порядок следования ключей будет a b с, гарантированно такой?
2) Каким образом мне узнать ключ, следующий за ключём $key? Например, $key = 'b', тогда ответом будет являться 'c'. Я думаю мне поможет функция next, но как установить "внутренний указатель" на нужную мне ячейку?
Спасибо.
 
 Top
vitaliy_mad
Отправлено: 20 Мая, 2009 - 02:18:42
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




Suspended пишет:
Я правильно понимаю, что порядок следования элементов жестко задан? выполняя foreach по массиву, порядок следования ключей будет a b с, гарантированно такой?

значения будут идти в порядке их добавления (для ассоциативного массива во всяком случае). в твоем примере да, так как ты написал...

Suspended пишет:
но как установить "внутренний указатель" на нужную мне ячейку

функция next current end prev reset - все они работают с "указателем". и для полноты списка еще each
 
 Top
valenok Модератор
Отправлено: 20 Мая, 2009 - 11:52:27
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $array = array(
  4.     'a' => 'apple',
  5.     'fruit2' => 'orange',
  6.     'fruit3' => 'grape',
  7.     'b' => 'apple',
  8.     'fruit5' => 'apple');
  9.  
  10. while (key($array) != 'b' )  next($array); next($array);
  11. echo key($array);
  12.  


-----
Truly yours, Sasha.
 
My status
 Top
Гость
Отправлено: 20 Мая, 2009 - 15:07:04
Post Id


УДАЛЁН










vitaliy_mad Кстати интересно если допустим читать элементы массива с помощтю next и key а потом удалтьэлмент из середины то сдвинется ли указтель Улыбка
 
 Top
vitaliy_mad
Отправлено: 20 Мая, 2009 - 15:11:32
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




JustUserR, эммм... интересно и правда.... только вот решил проверить, и у меня ступор Не понял , что т гоню я сегодня, не могу найти: как удалить элемент массива из середины?
 
 Top
Suspended
Отправлено: 20 Мая, 2009 - 15:15:54
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




А разве unset не то что надо?
 
 Top
vitaliy_mad
Отправлено: 20 Мая, 2009 - 15:17:12
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




Suspended пишет:
А разве unset не то что надо?
точно.... Радость
 
 Top
Гость
Отправлено: 20 Мая, 2009 - 15:17:44
Post Id


УДАЛЁН










vitaliy_mad Ну я вот что имел в виду
PHP:
скопировать код в буфер обмена
  1. $abc=array("A"=>"A","B"=>"B","C"=>"C","D"=>"D");
  2. echo key($abc); next($abc); // "A"
  3. echo key($abc); next($abc); // "B"
  4. unset($abc["C"]); echo key($abc);
С одной стороны "указатель" был уж на C а его удалили
Прото весь вопрс идет изза того что PHP сохраняет порядок элементов в ассоцированном массие (Тот же Perl держит их в случайном порядке)
 
 Top
vitaliy_mad
Отправлено: 20 Мая, 2009 - 15:19:25
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




JustUserR
ответ: указатель остается натом месте на котором было удаление, но происходит смещение элементов, и получается указатель становиться на следющий элемент...
(Добавление)
да, а PHP хранит их в порядке добавления\создание постояно...
 
 Top
Гость
Отправлено: 20 Мая, 2009 - 15:24:23
Post Id


УДАЛЁН










vitaliy_mad Интересное поведение хотя удобное - спсибо за ответ Улыбка
 
 Top
vitaliy_mad
Отправлено: 20 Мая, 2009 - 15:25:03
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




JustUserR пишет:
Интересное поведение хотя удобное - спсибо за ответ

согласен, спасибо за интересный вопрос.... Хорошо Подмигивание
 
 Top
Suspended
Отправлено: 20 Мая, 2009 - 15:32:32
Post Id


Новичок


Покинул форум
Сообщений всего: 33
Дата рег-ции: Июль 2008  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. $abc=array("A"=>"A","B"=>"B");
  2. echo key($abc); next($abc); // "A"
  3. echo key($abc); next($abc); // "B"
  4. prev($abc);
  5. echo key($abc); // false
  6.  

Попадая за пределы массива, вернуться похоже нельзя... только end()'ом.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB