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]   

> Без описания
Илья12
Отправлено: 18 Сентября, 2011 - 22:35:40
Post Id


Новичок


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


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




Помогите решить задачу.
Требуется, чтобы в функцию на вход подавался массив произвольной вложенности в качестве первого параметра, и некое значение (то есть, не массив) - в качестве второго (или наоборот), а возвращать функция должна цепочку индексов искомого элемента в поданном массиве - в произвольной форме (то есть, будет ли это строка индексов через запятую, или массив индексов - не важно).
То есть, если первым параметром подан массив, например,
$ar=array(0,1,2,array('d',31,32,33,array(340,341,'d'),'d'),4,5,array(60,61,62),'qwerty'=>'d');

а вторым - значение 341, то результатом должно быть что-то наподобие
3,4,1
Многократные вхождения искать не надо - то есть, если, для указанного примера, будет подано значение 'd', то достаточно будет его найти и выдать цепочку индексов один раз.
А вот глубина вложений должна поддерживаться произвольная - то есть, если подам массив двенадцатиуровневой вложенности - то могла бы вернуть цепочку с двенадцатью индексами, если искомое значение окажется в самой глубине.
 
 Top
grefon
Отправлено: 19 Сентября, 2011 - 07:35:06
Post Id



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


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


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




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

PHP:
скопировать код в буфер обмена
  1.  
  2. $array=array(0,1,2,array('d',31,32,33,array(340,341,'d'),'d'),4,5,array(60,61,62),'qwerty'=>'d');
  3. $val = 341;
  4.  
  5. $str = '';
  6. function arrayIndex($array, $x) {
  7.         global $str;
  8.         foreach ($array as $key=>$val) {
  9.                 if (is_array($val) && arrayIndex($val, $x)) {
  10.                         $str .= ','.$key;
  11.                         return true;
  12.                 } elseif ($val === $x) {
  13.                         $str .= ','.$key;
  14.                         return true;
  15.                 }
  16.         }
  17.         return false;
  18. }
  19. arrayIndex($array, $val);
  20. $str = strrev(substr($str, 1));
  21.  
  22. echo $str;
  23.  


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 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