Поиск самого глубокого дочернего элемента каждого родителя в массиве с использованием php - PullRequest
0 голосов
/ 11 июля 2020

Надеюсь, у тебя все хорошо. Недавно я столкнулся с проблемой во время практики PHP.

Учитывая следующий массив:

$arr = array(
    "P1"=>array(
        "C1"=>array(
            "C11"=>array(),
            "C12"=>array(
                "C121"=>array()
            )
        )
    ),
    "P2"=>array(
        "D1"=>array(
            "D11"=>array(
                "D121"=>array(),
                "D122"=>array(
                    "D1221"=>array()
                )
            ),
            "D12"=>array()
        )
    ),
    "P3"=>array()
);

Мы должны найти самого глубокого дочернего элемента каждого родителя. Пример вывода выглядит следующим образом:

P1 => C121
P2 => D1221
P3 =>

Я очень новичок в PHP, поэтому был бы очень благодарен за ваш вклад.

1 Ответ

0 голосов
/ 11 июля 2020

Рекурсия (функция, вызывающая сама себя) - это решение вашей проблемы.

Я использую здесь массив ключей и сохраняю уровень глубины. Чем выше, тем глубже. В конце я сортирую массив (по значению) в обратном порядке и возвращаю имя первого ключа (которое является самым глубоким) или пустое, если его нет.

foreach($array as $key => $value) {
    echo $key, ' => ', findDeepestChild($value), PHP_EOL;
}

function findDeepestChild(array $array, int $level = 0): string {
    $keys = [];
    foreach($array as $key => $value) {
        $keys[$key] = $level;
        if(!is_array($value)) continue;
        if(!empty($value)) return findDeepestChild($value, ++$level);
    }
    arsort($keys);
    return array_key_first($keys) ?? '';
}

Дает результат

P1 => C121 P2 => D1221 P3 =>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...