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]   

> Без описания
goooooch
Отправлено: 06 Февраля, 2015 - 12:12:05
Post Id



Гость


Покинул форум
Сообщений всего: 92
Дата рег-ции: Окт. 2010  


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




Всем привет.

В ассоциативном массиве мне нужно найти порядковый номер элемента по его ключу (чтобы разложить элементы массива по ячейкам html-таблицы).

Пишу простенькую функцию, которая бегает по массиву

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. function get_position($arr, $key)
  4.         {
  5.         $position = 1;                                 
  6.         foreach ($arr as $val => $arrCont)
  7.                 {
  8.                         if ($key == $val)
  9.                                 {
  10.                                         $position = 1;
  11.                                 }
  12.                         else
  13.                                 {
  14.                                         $position = $position +1;
  15.                                 }
  16.                         return $position;
  17.                 }                                      
  18.         }
  19. ?>     
  20.  


Проверяю таким образом:
PHP:
скопировать код в буфер обмена
  1.                        
  2. <?
  3. $arr = array (
  4. "key1" => "val1",
  5. "key2" => "val2",
  6. "key3" => "val3",
  7. "key4" => "val4");
  8. //print_r(array_reverse($arr));
  9. $arr = array_reverse($arr);
  10. $key = 'key3';
  11. $pos = get_position($arr, $key);
  12. echo $pos;
  13. ?>
  14.  


Обнаруживаю, что функция выдает порядковый номер элемента с конца! "Переворачиваю" массив с помощью array_reverse — все ок.

Работает и ладно, можно было бы не разбираться. Но все-таки... Особенность цикла foreach? Он с конца начинает перебор?
 
 Top
Мелкий Супермодератор
Отправлено: 06 Февраля, 2015 - 12:18:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Массивы PHP - двусвязный список.
Foreach ходит непосредственно по этому двусвязному списку.
Между ключом и порядком обхода никакой взаимосвязи вообще нет.

А функция у вас очень странная. Она может вернуть только 1 или 2.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB