Это решение подойдет в тех случаях, когда нужно из многомерного массива вытащить все вложенные массивы и сделать их первого уровня. Например, когда была получена древовидная структура каких-либо данных. Пример:
[
0 => [
"id" => 19,
"parent_id" => 12,
"title" => "Test title 1",
"children" => []
],
1 => [
"id" => 23,
"parent_id" => 12,
"title" => "Test title 2",
"children" => [
0 => [
"id" => 44,
"parent_id" => 23,
"title" => "test subtitle 1",
"children" => [
0 => [
"id" => 56,
"parent_id" => 44,
"title" => "test subtitle 2"
],
1 => [
"id" => 57,
"parent_id" => 44,
"title" => "test subtitle 3"
],
]
]
]
],
2 => [
"id" => 43,
"parent_id" => 12,
"title" => "Test title 3",
"children" => []
]
]
В неём мы видим: вложенные массивы с испольованием ключа children
, а также пустые children
в уже имеющихся массивах первого уровня.
Делаем из них массивы первого уровня с помощью функции:
function normalizeArray(array $array = []): array
{
static $out = [];
foreach ($array as $subArray) {
if (!empty($subArray['children'])) {
$arrayToAdd = $subArray;
unset($arrayToAdd['children']);
$out[] = $arrayToAdd;
normalizeArray($subArray['children']);
} else {
if (isset($subArray['children'])) {
unset($subArray['children']);
}
$out[] = $subArray;
}
}
return $out;
}
Также будут убраны ключи children
.
Результат
[
0 => [
"id" => 19,
"parent_id" => 12,
"title" => "Test title 1",
],
1 => [
"id" => 23,
"parent_id" => 12,
"title" => "Test title 2",
],
2 => [
"id" => 44,
"parent_id" => 23,
"title" => "test subtitle 1",
],
3 => [
"id" => 56,
"parent_id" => 44,
"title" => "test subtitle 2"
],
4 => [
"id" => 57,
"parent_id" => 44,
"title" => "test subtitle 3"
],
5 => [
"id" => 43,
"parent_id" => 12,
"title" => "Test title 3",
]
];