Этот вопрос закрыт для ответов, так как повторяет вопрос Как найти ключ родителя в многомерном ассоциативном массиве?
@MarkSexton

Как найти ключ родителя в многомерном ассоциативном массиве?

Добрый день!

Имеется многомерный ассоциативный массив, необходимо найти ключ родителя, что бы ему присвоить флаг "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>";


Солгу, если скажу, что прошерстил весь Гугл, но что-то похожего не нашел... Да... я знаю, что это обычный рекурсивный проход по массиву, но у меня не получается выстроить связь родительских ключей с ключами дочерними
  • Вопрос задан
  • 106 просмотров
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽