Имеется многомерный ассоциативный массив, необходимо найти ключ родителя, что бы ему присвоить флаг "true".
Одной из особенностей данной задачи является то, что уровней может быть over 999+, соответственно, в новом массиве нужно составить некую последовательность родительский ключей, что бы в последствие разобрать его и подставить к выборке
like this...
$menu[1]['active'] = true;
$menu[1]['children'][1]['active'] = true;
$menu[1]['children'][1]['children'][1]['active'] = true;
Ниже вы увидите одну из моих безуспешных попыток реализовать данный функционал
$arr = array (
[0] => array (
['name'] => '0 пункт',
['active'] => false,
['children']=> array(),
),
[1] => array (
['name'] => '1 пункт',
['active'] => false,
['children']=> array(
[0] => array(
['name'] => '1.0 пункт',
['active'] => false,
['children'] => array(),
),
[1] => array(
['name'] => '1.1 пункт',
['active'] => false,
['children'] => array(
[0] => array(
['name'] => '1.1.0 пункт',
['active'] => true,
['children'] => array(),
),
[1] => array(
['name'] => '1.1.0 пункт',
['active'] => false,
['children'] => array(),
)
),
),
[2] => array(
['name'] => '1.2 пункт',
['active'] => false,
['children'] => array(),
),
),
),
[2] => array (
['name'] => '2 пункт',
['active'] => false,
['children']=> array(),
),
);
function processArray($data, $level = 0, $output = []) {
foreach($data as $key => $value) {
if( $value['active'] ) {
array_push($output, $level);
} elseif( !empty($value['children']) ) {
array_push($output, $key);
processArray($value['children'], $key);
}
}
return $output;
}
// Ожидаемый результат [1,1,1]
echo "<pre>";
var_dump(processArray($menu));
echo "</pre>";
Солгу, если скажу, что прошерстил весь Гугл, но что-то похожего не нашел... Да... я знаю, что это обычный рекурсивный проход по массиву, но у меня не получается выстроить связь родительских ключей с ключами дочерними.