Массив, который вы получаете из внешнего источника, похож на набор отдельных веток, которые вам нужно объединить в одно дерево.Вы можете использовать рекурсивную функцию, чтобы создать «оптимизированную» структуру, к которой вы стремитесь.Рекурсивный подход должен работать независимо от глубины каждой ветви.
function merge_branches(array $branches): array
{
$merge = function ($node, &$tree) use (&$merge) {
if (is_array($value = reset($node))) {
$merge($value, $tree[key($node)]); // merge branch node recursively
} else {
$tree[key($node)] = $value; // set leaf node to value
}
};
$tree = [];
foreach ($branches as $branch) {
$merge($branch, $tree);
}
return $tree;
}
$optimized = merge_branches($external);