我有一个深度不确定的多维数组,需要将其缩减为二维数组(关联行的索引数组)。
array:5 [▼
0 => array:3 [▼
"id" => 2
"level" => 0
"email" => "[email protected]"
]
1 => array:2 [▼
0 => array:3 [▼
"id" => 4
"level" => 1
"email" => "[email protected]"
]
1 => array:2 [▼
0 => array:3 [▼
"id" => 5
"level" => 2
"email" => "[email protected]"
]
1 => array:1 [▼
0 => array:3 [▼
"id" => 6
"level" => 3
"email" => "[email protected]"
]
]
]
]
2 => array:3 [▼
"id" => 3
"level" => 0
"email" => "[email protected]"
]
4 => array:3 [▼
"id" => 7
"level" => 0
"email" => "[email protected]"
]
5 => array:2 [▼
0 => array:3 [▼
"id" => 8
"level" => 1
"email" => "[email protected]"
]
1 => array:2 [▼
0 => array:3 [▼
"id" => 9
"level" => 2
"email" => "[email protected]"
]
1 => array:2 [▼
0 => array:3 [▼
"id" => 10
"level" => 3
"email" => "[email protected]"
]
1 => array:2 [▼
0 => array:3 [▼
"id" => 11
"level" => 4
"email" => "[email protected]"
]
1 => array:1 [▼
0 => array:3 [▼
"id" => 12
"level" => 5
"email" => "[email protected]"
]
]
]
]
]
]
]
我想清理上面的数组并获得如下所示的二维数组(截断):
array:3 [▼
0 => array:3 [▼
"id" => 1
"level" => 2
"email" => "[email protected]"
]
1 => array:3 [▼
"id" => 2
"level" => 5
"email" => "[email protected]"
]
2 => array:3 [▼
"id" => 1
"level" => 8
"email" => "[email protected]"
],
...
]
理想情况下,我希望结果按
id
排序。
如果重要的话,我的项目正在 Laravel8 上运行。
为了确保您的关联子数组在展平时不会被解构,仅扩展未索引的数组。将
$row
包裹在父数组内部,这样当它被 ...
扩展时,原始数据行将保持完整。
将结构减少到 2 级后进行排序。
代码:(演示)
function flattenList(array $array): array
{
$result = [];
foreach ($array as $row) {
array_push($result, ...array_is_list($row) ? flattenList($row) : [$row]);
}
return $result;
}
$flatten2d = flattenlist($array);
usort($flatten2d, fn($a, $b) => $a['id'] <=> $b['id']);
var_export($flatten2d);