ОсновноеRadiotalkПользовательское
Программирование
6   •   Посмотреть все темы

Посчитать "уровень вложенности многомерного массива"

 

284
arteshuk @arteshuk
вопрос из серии "то ли лыжи не едут, толи одно из двух.....


Array
(
[0] => Array
(
[id] => 15
[pid] => 0
[module_id] => comments1
(
[0] => Array
(
[id] => 16
[pid] => 15
[module_id] => comments1
(
[0] => Array
(
[id] => 21
[pid] => 16
[module_id] => comments1
)

)

)

)

)

нужно как то вычислить, на "каком уровне вложенности" от "корневого массива" находится элемент с id 21 (сейчас он на третьем) (ну вобщем любой элемент, ибо функция должна быть универсальной, вычислять любой уровень вложенности...

нагуглить ничего за 30 минут не смог, возможно потому что не знаю как это правильно обозвать 😀

спасибо!

20090
Dimitry @Dimitry
Попробую размять мозг)

$level=0; $id=21;
function search($a) {
global $level,$id;
$level++;
if($a[id]==$id) return $level;
if($a[id]<0) return 0;
return search($a[module_id][comments1][0]);
}

echo search($array);

Если я правильно понял структуру, а вообще она может быть сложной, для этого и функция сложнее будет.
Возвращает 0 если ничего не находит.

284
arteshuk @arteshuk
Тезка, спасибо, в том то и дело, что написать надо универсально...чтоб находило любой уровень от корня....

при этом структура массива может быть разной.... короче надо получить дерево...

ЗЫ мозг разминал до 3-х ночи ))))

20090
Dimitry @Dimitry
ну так проверять же приходитсят только параметр id? тогда просто проходить весь массив с помощщь foreach..

284
arteshuk @arteshuk
ты немного не понял...

на выходе у меня должно получится 3 числа (в данном случае три, а так в зависимости от массива) 1,2,3

т.е. уровень, на котором от корня находится каждый элемент многомерного массива

3173
Николай @grom
arteshuk пишет:

ты немного не понял...

на выходе у меня должно получится 3 числа (в данном случае три, а так в зависимости от массива) 1,2,3

т.е. уровень, на котором от корня находится каждый элемент многомерного массива

[url=programmersforum.ru]=>[/url]

284
arteshuk @arteshuk
да можно на 3-х десятков форумах написать....толку никакого...

20090
Dimitry @Dimitry
Нельзя решить задачу в которой не достаточно условий для её решения 😀

3173
Николай @grom
Dimitry пишет:

Нельзя решить задачу в которой не достаточно условий для её решения 😀

Можно, но условие делать "под себя" 😁

1
b1f @b1f
рекурсивно

что то типа

function array_level (array $arr, $search_element, $key='id' , $parent = 'module_id') {

$i= isset($i) ? $i : 1;

foreach ($arr as $val) {
if ($val[$key] == $element) return $i;
else {
$i++;
array_level($val[$parent], $search_elementю, $key);
}
}
return false;
}

$level = array_level($array, '21');

не проверял, но как то так

Отредактировано b1f - 04.02.2012
20090
Dimitry @Dimitry
$i должна быть как минимум глобальной или передаваться как параметр, думаю мой вариант что я давал более рабочий)