[英]Creating parent-child array PHP
我有一個平面數組,我試圖將其轉換為父子數組:
Array
(
[0] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze7b2e
)
[1] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_czeg8ay
)
[2] => Array
(
[parent_id] => t1_czeg8ay
[id] => t1_czet481
)
[3] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze4whs
)
[4] => Array
(
[parent_id] => t1_cze4whs
[id] => t1_cze9v0o
)
[5] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czec4vd
)
[6] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czep9e2
)
[7] => Array
(
[parent_id] => t1_czep9e2
[id] => t1_czf2k8e
)
[8] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czeixa7
)
[9] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czecx26
)
[10] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeenuz
)
[11] => Array
(
[parent_id] => t1_czeenuz
[id] => t1_czeftkf
)
[12] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czehjrz
)
[13] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeien4
)
[14] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czebugl
)
[15] => Array
(
[parent_id] => t1_cze4whs
[id] => t1_cze9hvb
)
[16] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze3vku
)
[17] => Array
(
[parent_id] => t1_cze3vku
[id] => t1_czemk0g
)
[18] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_czeedh9
)
[19] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_czeenjx
)
[20] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze5r5u
)
[21] => Array
(
[parent_id] => t1_cze5r5u
[id] => t1_czefle4
)
[22] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze8oht
)
[23] => Array
(
[parent_id] => t1_cze8oht
[id] => t1_czelwvs
)
[24] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze5cs6
)
[25] => Array
(
[parent_id] => t1_cze5cs6
[id] => t1_czefydi
)
[26] => Array
(
[parent_id] => t1_cze5cs6
[id] => t1_czedpml
)
[27] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze42aq
)
[28] => Array
(
[parent_id] => t1_cze42aq
[id] => t1_cze8iei
)
[29] => Array
(
[parent_id] => t1_cze8iei
[id] => t1_czebkgk
)
[30] => Array
(
[parent_id] => t1_czebkgk
[id] => t1_czedid2
)
[31] => Array
(
[parent_id] => t1_cze8iei
[id] => t1_czebqgn
)
[32] => Array
(
[parent_id] => t1_cze42aq
[id] => t1_cze77xr
)
[33] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_czen20j
)
)
這是我的遞歸函數,它映射id並將其放入父子數組:
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
這是我從上述功能獲得的輸出:
Array
(
[0] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze7b2e
)
[1] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_czeg8ay
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czeg8ay
[id] => t1_czet481
)
)
)
[2] => Array
(
[parent_id] => t1_czeg8ay
[id] => t1_czet481
)
[3] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze4whs
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze4whs
[id] => t1_cze9v0o
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czec4vd
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czep9e2
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czep9e2
[id] => t1_czf2k8e
)
)
)
[1] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czeixa7
)
)
)
[1] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czecx26
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeenuz
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czeenuz
[id] => t1_czeftkf
)
)
)
[1] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czehjrz
)
[2] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeien4
)
)
)
[2] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czebugl
)
)
)
[1] => Array
(
[parent_id] => t1_cze4whs
[id] => t1_cze9hvb
)
)
)
[4] => Array
(
[parent_id] => t1_cze4whs
[id] => t1_cze9v0o
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czec4vd
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czep9e2
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czep9e2
[id] => t1_czf2k8e
)
)
)
[1] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czeixa7
)
)
)
[1] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czecx26
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeenuz
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czeenuz
[id] => t1_czeftkf
)
)
)
[1] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czehjrz
)
[2] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeien4
)
)
)
[2] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czebugl
)
)
)
[5] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czec4vd
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czep9e2
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czep9e2
[id] => t1_czf2k8e
)
)
)
[1] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czeixa7
)
)
)
[6] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czep9e2
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czep9e2
[id] => t1_czf2k8e
)
)
)
[7] => Array
(
[parent_id] => t1_czep9e2
[id] => t1_czf2k8e
)
[8] => Array
(
[parent_id] => t1_czec4vd
[id] => t1_czeixa7
)
[9] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czecx26
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeenuz
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czeenuz
[id] => t1_czeftkf
)
)
)
[1] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czehjrz
)
[2] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeien4
)
)
)
[10] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeenuz
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czeenuz
[id] => t1_czeftkf
)
)
)
[11] => Array
(
[parent_id] => t1_czeenuz
[id] => t1_czeftkf
)
[12] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czehjrz
)
[13] => Array
(
[parent_id] => t1_czecx26
[id] => t1_czeien4
)
[14] => Array
(
[parent_id] => t1_cze9v0o
[id] => t1_czebugl
)
[15] => Array
(
[parent_id] => t1_cze4whs
[id] => t1_cze9hvb
)
[16] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze3vku
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze3vku
[id] => t1_czemk0g
)
)
)
[17] => Array
(
[parent_id] => t1_cze3vku
[id] => t1_czemk0g
)
[18] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_czeedh9
)
[19] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_czeenjx
)
[20] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze5r5u
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze5r5u
[id] => t1_czefle4
)
)
)
[21] => Array
(
[parent_id] => t1_cze5r5u
[id] => t1_czefle4
)
[22] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze8oht
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze8oht
[id] => t1_czelwvs
)
)
)
[23] => Array
(
[parent_id] => t1_cze8oht
[id] => t1_czelwvs
)
[24] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze5cs6
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze5cs6
[id] => t1_czefydi
)
[1] => Array
(
[parent_id] => t1_cze5cs6
[id] => t1_czedpml
)
)
)
[25] => Array
(
[parent_id] => t1_cze5cs6
[id] => t1_czefydi
)
[26] => Array
(
[parent_id] => t1_cze5cs6
[id] => t1_czedpml
)
[27] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_cze42aq
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze42aq
[id] => t1_cze8iei
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze8iei
[id] => t1_czebkgk
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czebkgk
[id] => t1_czedid2
)
)
)
[1] => Array
(
[parent_id] => t1_cze8iei
[id] => t1_czebqgn
)
)
)
[1] => Array
(
[parent_id] => t1_cze42aq
[id] => t1_cze77xr
)
)
)
[28] => Array
(
[parent_id] => t1_cze42aq
[id] => t1_cze8iei
[children] => Array
(
[0] => Array
(
[parent_id] => t1_cze8iei
[id] => t1_czebkgk
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czebkgk
[id] => t1_czedid2
)
)
)
[1] => Array
(
[parent_id] => t1_cze8iei
[id] => t1_czebqgn
)
)
)
[29] => Array
(
[parent_id] => t1_cze8iei
[id] => t1_czebkgk
[children] => Array
(
[0] => Array
(
[parent_id] => t1_czebkgk
[id] => t1_czedid2
)
)
)
[30] => Array
(
[parent_id] => t1_czebkgk
[id] => t1_czedid2
)
[31] => Array
(
[parent_id] => t1_cze8iei
[id] => t1_czebqgn
)
[32] => Array
(
[parent_id] => t1_cze42aq
[id] => t1_cze77xr
)
[33] => Array
(
[parent_id] => t3_42yrg7
[id] => t1_czen20j
)
)
盡管它的第一部分是正確的,但有時它會在第一次正確映射后將子數組標記為父數組。 為什么將某些子數組映射為父數組?
編輯:我是個白痴,當我調用buildTree()
我沒有傳遞parentId,而只是將值保留為零。
我不知道您到底想要什么,但是我添加了我的代碼以將父級和子級數組分開。 請檢查以下代碼:
function buildTree($elements = array()) {
$branch = array();
if(!empty($elements))
{
foreach ($elements as $element) {
if(!isset($branch[$element['parent_id']]))
{
$branch['parent_id'][]=$element['parent_id'];
$branch[$element['parent_id']]=array();
$branch[$element['parent_id']]['children'][]=$element['id'];
}
else
{
$branch[$element['parent_id']]['children'][]=$element['id'];
}
}
}
return $branch;
}
$arr_rtn = buildTree($arr);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.