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 значиния одного уровня массива

 PHP.SU

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


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

> Без описания
garvey
Отправлено: 24 Сентября, 2010 - 12:07:31
Post Id



Частый посетитель


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


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




Добрый день. Я имею древовидный массив:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [1005] => Array
  3.         (
  4.             [1000] => Array
  5.                 (
  6.                     [pv] => 68
  7.                 )
  8.  
  9.             [1101] => Array
  10.                 (
  11.                     [1102] => Array
  12.                         (
  13.                             [pv] => 94
  14.                         )
  15.  
  16.                     [1103] => Array
  17.                         (
  18.                             [pv] => 80
  19.                         )
  20.  
  21.                     [pv] => 66
  22.                 )
  23.  
  24.             [pv] => 69
  25.         )
  26.  
  27. )

Как вы можете заметить, в этом массиве можно выделить несколько уровней. Причем кол-во этих уровней может варироваться в самых разных диапазонах. Моя задача получить значения элемента [pv] для каждого уровня.

Для первого уровня это будет 69.
Для второго уровня - 68 и 66.
Для третьего - 94 и 80.

Как бы так сделать? Спасибо.
 
 Top
Мелкий Супермодератор
Отправлено: 24 Сентября, 2010 - 18:29:05
Post Id



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


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


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




foreach'ом пробегать массив n-ого уровня. Элементы проверять на is_array, если да - вызывать рекурсивно функцию для уровня n+1, если нет и это элемент pv = забрасывать в результат.


-----
PostgreSQL DBA
 
 Top
garvey
Отправлено: 25 Сентября, 2010 - 06:58:39
Post Id



Частый посетитель


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


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




Понятно что рекурсия и цикл. Но как выбрать именно этот уровень массива?
 
 Top
Uchkuma
Отправлено: 25 Сентября, 2010 - 12:34:20
Post Id



Участник


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


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




garvey
garvey пишет:
Но как выбрать именно этот уровень массива?
Что значит "как выбрать именно этот уровень массива"?
Если вам нужно для каждого уровня занести все значения pv в отдельный массив, то можно создать многомерный массив, в котором каждый элемент это массив значений pv соответствующего уровня.
PHP:
скопировать код в буфер обмена
  1. $array[$n][] = $arr['pv'];//$n - это номер уровня
 
 Top
JustUserR
Отправлено: 25 Сентября, 2010 - 12:46:40
Post Id



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


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


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




garvey пишет:
Но как выбрать именно этот уровень массива?
Для выбора некоторого уровня вложенности многомерного массива при его ассоциативном представлегии и разбора с помощью ресурсивной функции - можно исползовать специальный лексический параметр функции который будет хранить значение глубины ресурсии - и на основе оператора сравнения можно выполнят определенные действия именно при его разборе


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Мелкий Супермодератор
Отправлено: 25 Сентября, 2010 - 15:45:01
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. $data = Array
  2. (
  3.     [1005] => Array
  4.         (
  5.             [1000] => Array
  6.                 (
  7.                     [pv] => 68
  8.                 )
  9.             [1101] => Array
  10.                 (
  11.                     [1102] => Array
  12.                         (
  13.                             [pv] => 94
  14.                         )
  15.                     [1103] => Array
  16.                         (
  17.                             [pv] => 80
  18.                         )
  19.                     [pv] => 66
  20.                 )
  21.             [pv] => 69
  22.         )
  23. )
  24. $result = array();
  25. function abcd($n=0) {
  26. global $result,$data;
  27. foreach($data as $k=>$el) {
  28. if (is_array($el)) abcd($n+1);
  29. elseif ($k == "pv") $global[$n][] = $el;
  30. }
  31. }
  32.  
  33. abcd();


не проверял, но идея должна быть ясна.


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 25 Сентября, 2010 - 23:41:32
Post Id



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


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


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




Мелкий пишет:
Ноидея должна быть ясна.
Для осуществления обработки древесных стурктур возможно использование поуровневого разбора с передачей текущего значения по ссылке - в таком случае вызов функции обрабатывающий некоторый дочерний элемент может как изменить его позицию в родительском так и определить уровень верхней вложенности - по сути такой похдох аналогичен созданию двухсвязного списка


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 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