Есть массив:
$array = array(
'0' => array(
'KY0' => array(
'k2' => array(
'k3' => 0,
'k4' => 1,
'k5' => array(
'k6' => 1,
'k7' => 2,
'k8' => array(
'k9' => 9,
),
'k10' => array(
'k11' => 4,
'k12' => 1,
),
),
),
),
'KY1' => array(
'k2' => array(
'k10' => 0
),
),
),
'1' => array(
'k10' => 6
)
);
Мне необходимо найти например все ключи "k10" и вернуть их полный путь в виде нового массива.
Пытаюсь это сделать рекурсивным итератором:
function FindPath(array $array, $SearchKey) {
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($iterator as $key => $current) {
if ($key == $SearchKey || $iterator->getDepth() < $depth) {
$s[] = $key;
if ($iterator->getDepth() == 0) {
$path[] = array_reverse($s);
$s = [];
}
$depth = $iterator->getDepth();
}
}
return $path;
}
print_r(FindPath($array, 'k10'));
Но на выходе получаю такой массив:
Array
(
[0] => Array
(
[0] => 0
[1] => KY1
[2] => k2
[3] => k10
[4] => KY0
[5] => k2
[6] => k5
[7] => k10
)
[1] => Array
(
[0] => 1
[1] => k10
)
)
Подскажите пожалуйста как мне получить массив следующего вида:
Array
(
[0] => Array
(
[0] => 0
[1] => KY0
[2] => k2
[3] => k5
[4] => k10
)
[1] => Array
(
[0] => 0
[1] => KY1
[2] => k2
[3] => k10
)
[2] => Array
(
[0] => 1
[1] => k10
)
)
Бежим рекурсивно по массиву и добавляем в каждой итерации ключ в $path
После итерации убираем из $path последний элемент, чтобы в след цикле был верный путь
Когда встречаем ключ, который мы ищем - добавляем найденный $path в $paths
$paths = [];
fillPaths($array, 'k10', $paths);
var_dump($paths);
function fillPaths($array, $searchKey, &$paths = [], &$path = []) {
foreach ($array as $key => $values) {
$path[] = $key;
if ($key === $searchKey) {
$paths[] = $path;
}
if (is_array($values)) {
fillPaths($values, $searchKey, $paths, $path);
}
array_pop($path);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
У меня есть цикл, который выводит слайды (библиотека owl-carousel2) с информацией по врачамИ для каждого слайда (класс doctors_slider__item) мне надо создать...
У меня есть задача в cron, которая парсит данные с одного сайта и переводит их в jsonПарсер работает исправно
Есть график на две недели , то есть с 1 сентября у нас начинается первая неделя , потом следующая вторая, а потом следующая опять перваяПодскажите...