Рекурсивный вывод данных из многомерного массива php
Есть массив с позициями в организации:
Array
(
[0] => Array
(
[position] =>
[position-ru] => Старший специалист
[description] => ...
[next] => Array
(
[0] => Array
(
[position] =>
[position-ru] => Эксперт
[description] => ...
[next] => Array
(
[0] => Array
(
[position] =>
[position-ru] => Ведущий эксперт
[description] => ...
[next] => Array
(
[0] => Array
(
[position] =>
[position-ru] => Руководитель
[description] => ...
[next] => Array
(
[0] => Array
(
[position] =>
[position-ru] => Директор
[description] => ...
)
)
)
)
)
[1] => Array
(
[position] =>
[position-ru] => Менеджер
[description] => ...
[next] => Array
(
[0] => Array
(
[position] =>
[position-ru] => Руководитель
[description] => ...
[next] => Array
(
[0] => Array
(
[position] =>
[position-ru] => Директор
[description] => ...
)
)
)
)
)
[2] => Array
(
[position] =>
[position-ru] => Руководитель группы
[description] => ...
[next] => Array
(
[0] => Array
(
[position] =>
[position-ru] => Руководитель
[description] => ...
[next] => Array
(
[0] => Array
(
[position] =>
[position-ru] => Директор
[description] => ...
)
)
)
)
)
)
)
)
)
)
Нужно вывести все варианты путей от Старшего специалиста до Руководителя, в виде такого массива:
Array
(
[0] => Array
(
[0] => Старший специалист
[1] => Эксперт
[2] => Ведущий эксперт
[3] => Руководитель
)
[1] => Array
(
[0] => Старший специалист
[1] => Эксперт
[2] => Менеджер
[3] => Руководитель
)
[2] => Array
(
[0] => Старший специалист
[1] => Эксперт
[2] => Руководитель группы
[3] => Руководитель
)
)
Мой код:
$b = 'Руководитель';
function rez($data, $b, &$result, $t = 0)
{
foreach ($data as $k => $v) {
$pos = $data[$k]['position-ru'];
$next = $data[$k]['next'];
$result[$t][] = $pos;
if ($pos !== $b && !empty($next)) {
$data_ = $data;
$data = $next;
rez($data, $b, $result, $t);
$data = $data_;
}
$t++;
}
}
Выводит следующее:
Array
(
[0] => Array
(
[0] => Старший специалист
[1] => Эксперт
[2] => Ведущий эксперт
[3] => Руководитель
)
[1] => Array
(
[0] => Менеджер
[1] => Руководитель
)
[2] => Array
(
[0] => Руководитель группы
[1] => Руководитель
)
)
Как можно доработать код?
Ответы (1 шт):
Автор решения: Вильдан
→ Ссылка
function directions($arr, $b, &$result, $path = null)
{
$pos = $arr['position-ru'];
$next = $arr['next'];
unset($arr['next']);
$path[] = $arr;
if ($pos == $b) {
$result[] = $path;
} elseif (!empty($next)) {
foreach ($next as $k) {
directions($k, $b, $result, $path);
}
}
}