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
Форумы портала PHP.SU :: Версия для печати :: задача с многоуровневым массивом
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » задача с многоуровневым массивом

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

1. Илья12 - 18 Сентября, 2011 - 22:35:40 - перейти к сообщению
Помогите решить задачу.
Требуется, чтобы в функцию на вход подавался массив произвольной вложенности в качестве первого параметра, и некое значение (то есть, не массив) - в качестве второго (или наоборот), а возвращать функция должна цепочку индексов искомого элемента в поданном массиве - в произвольной форме (то есть, будет ли это строка индексов через запятую, или массив индексов - не важно).
То есть, если первым параметром подан массив, например,
$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', то достаточно будет его найти и выдать цепочку индексов один раз.
А вот глубина вложений должна поддерживаться произвольная - то есть, если подам массив двенадцатиуровневой вложенности - то могла бы вернуть цепочку с двенадцатью индексами, если искомое значение окажется в самой глубине.
2. grefon - 19 Сентября, 2011 - 07:35:06 - перейти к сообщению
Стандартной функции поиска в многомерном массиве нет. Вот что получилось у меня, думаю принцип будет ясен:

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.  

 

Powered by ExBB FM 1.0 RC1