[英]PHP: Convert linear array to tree structure array
I have an array like bellow 我有一个像波纹管这样的数组
Array
(
[0] => Array
(
[parent_id] => 0
[child_id] => 1
[uuid] => a707aa7f-2180-4cb5-9227-57c948491731
[sdi] =>
[serial] => 03466720000004033
[gs1_id] => urn:epc:id:sscc:0346672.0000004033
[type] => CONTAINER
)
[1] => Array
(
[parent_id] => 1
[child_id] => 2
[uuid] => 5bd9da67-90eb-4fb1-b25a-0f534efd661f
[sdi] => SDI-5bd9da67-90eb-4fb1-b25a-0f534efd661f
[serial] => 100000003718
[gs1_id] => urn:epc:id:sgtin:0369499.232915.100000003718
[type] => PRODUCT
)
[2] => Array
(
[parent_id] => 2
[child_id] => 3
[uuid] => b3224592-0268-4853-8700-03f53e759fa1
[sdi] => SDI-b3224592-0268-4853-8700-03f53e759fa1
[serial] => 100000042535
[gs1_id] => urn:epc:id:sgtin:0369499.032915.100000042535
[type] => PRODUCT
)
)
but I need a tree structure data from the array by using parent_id
and child_id
and the array size may be 100,000. 但是我需要使用
parent_id
和child_id
从数组中获取树结构数据,并且数组大小可能为100,000。
How can I do that? 我怎样才能做到这一点?
Write a recursive function in order to convert the array from linear to tree. 编写一个递归函数以将数组从线性转换为树。 I have written such a function for your use-case.
我已经为您的用例编写了这样的功能。
Look at the following code: 看下面的代码:
/**
* Recursively sort an array of hierarchically. Childs will be placed under a 'children' member of their parent term.
*/
function sort_array_hierarchically(Array &$linear, Array &$into, $parentId = 0) {
foreach ($linear as $i => $elem) {
if ($elem["parent_id"] == $parentId) {
array_push($into,$elem);
}
}
foreach ($into as $k => $topElem) {
$into[$k]["children"] = [];
sort_array_hierarchically($linear, $into[$k]["children"], $topElem["child_id"]);
}
}
$linear_array = [
["parent_id"=>0,"child_id"=>1,"name"=>"foo"],
["parent_id"=>1,"child_id"=>2,"name"=>"bar"],
["parent_id"=>0,"child_id"=>3,"name"=>"lol"],
["parent_id"=>1,"child_id"=>4,"name"=>"sure"],
["parent_id"=>4,"child_id"=>5,"name"=>"never"],
["parent_id"=>3,"child_id"=>6,"name"=>"never"]
];
$into = [];
sort_array_hierarchically($linear_array,$into);
var_dump($into);
The output looks like this: 输出看起来像这样:
array(2) {
[0]=>
array(4) {
["parent_id"]=>
int(0)
["child_id"]=>
int(1)
["name"]=>
string(3) "foo"
["children"]=>
array(2) {
[0]=>
array(4) {
["parent_id"]=>
int(1)
["child_id"]=>
int(2)
["name"]=>
string(3) "bar"
["children"]=>
array(0) {
}
}
[1]=>
array(4) {
["parent_id"]=>
int(1)
["child_id"]=>
int(4)
["name"]=>
string(4) "sure"
["children"]=>
array(1) {
[0]=>
array(4) {
["parent_id"]=>
int(4)
["child_id"]=>
int(5)
["name"]=>
string(5) "never"
["children"]=>
array(0) {
}
}
}
}
}
}
[1]=>
array(4) {
["parent_id"]=>
int(0)
["child_id"]=>
int(3)
["name"]=>
string(3) "lol"
["children"]=>
array(1) {
[0]=>
array(4) {
["parent_id"]=>
int(3)
["child_id"]=>
int(6)
["name"]=>
string(5) "never"
["children"]=>
array(0) {
}
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.