我有一個這樣的陣列:
我有一個這樣的陣列。
[ "id": 1, "name": "Kategorie 1"/span>, "parent_id"/span>: null, [ "id": 2, "name": "Kategorie 1.1"/span>, "parent_id"/span>: 1, [ "id": 5, "name": "Kategorie 1.1.1"/span>, "parent_id"/span>: 2, [ "id": 11, "name": "Kategorie 1.1.1.1"/span>, "parent_id"/span>: 5, [] ], [ "id": 12, "name": "Kategorie 1.1.1.2"/span>, "parent_id": 5, [] ]. , ........]
所以這是一個分類層次,如:
Category 1
類別 1.1
類別1.2
類別1.2.1
類別1.2.1.1。
類別2.
類別2.1。
類別2.1.1。
類別2.2.
類別2.3。
但類別的深度是可變的。
那么有沒有一種方法可以將陣列平鋪/合并為:
。[ [ "id": 1, "name": "Kategorie 1"/span>, "parent_id"/span>: null], [ "id": 2, "name": "Kategorie 1.1"/span>, "parent_id"/span>: 1], [ "id": 5, "name": "Kategorie 1.1.1"/span>, "parent_id"/span>: 2], [ "id": 11, "name": "Kategorie 1.1.1.1"/span>, "parent_id"/span>: 5], [ "id": 12, "name": "Kategorie 1.1.1.2"/span>, "parent_id": 5] ]
uj5u.com熱心網友回復:
這就是你要的:
<?php
$array = [
[
"id" => 1, "name" => "Kategorie 1", "parent_id" => null,
[
"id" => 2, "name" => "Kategorie 1. 1", "parent_id" => 1,
[
"id" => 5, "name" => "Kategorie 1. 1.1", "parent_id" => 2,
[
"id" => 11, "name" => "Kategorie 1. 1.1.1", "parent_id" => 5, [] 。
],
[
"id" => 12, "name" => "Kategorie 1. 1.1.2", "parent_id" => 5, [] 。
]
]
]
]
];
function flatMerge(array $array, array & $result = [])
{
$subResult = []。
foreach ($array as $key => $sub) {
if (is_array($sub)) {
flatMerge($sub, $result) 。
} else {
$subResult[$key] =$sub。
}
}
$result[] = $subResult;
return $result;
}
$result = flatMerge($array); // flat merge array
var_dump($result)。
$result = array_filter($result, static function (array) { //span>洗掉空陣列。
return !empty($array)。
});
var_dump($result)。
$result = array_values($result); //reset array keys.
var_dump($result)。
你可以在這里看到這段代碼的結果。http://sandbox.onlinephpfunctions.com/code/b4eaddb4a52f5e9cf9a80644190e526613381c60
uj5u.com熱心網友回復:
假定你的陣列是這樣的:
$arr = [
[
"id" => 1, "name" => "Kategorie 1", "parent_id" => null,
"children" => [
"id" => 2, "name" => "Kategorie 1. 1", "parent_id" => 1,
"children" => [
"id" => 5, "name" => "Kategorie 1. 1.1", "parent_id" => 2,
children => [
["id" => 11, "name" => "Kategorie 1. 1.1.1", "parent_id" => 5, "children" => [] ] 。
["id" => 12, "name" => "Kategorie 1. 1.1.2", "parent_id"=> 5, "children"=> [] ] ]
]
]
]
]
];
下面的函式可能對你的情況有效,使用遞回函式:
function flatten(array $array) {
$branch = [];
foreach ($array as $item) {
$children = [] 。
if (isset($item["children"/span>]) & & is_array($item["children"] )) {
$children = flatten($item["children"]) 。
unset($item["children"])。
}
$branch = array_merge($branch, [$item], $children) 。
}
return $branch;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/321604.html
標籤:
