我有一個問題,當我想在我的數據來創建樹結構,這是我對樣本數據如何從父類別的子項目製作樹?
$categories = array(
array(
'id' => 2 ,
'name' => 'banana',
'parent' => 1
),
array(
'id' => 1 ,
'name' => 'fruit',
'parent' => 0
),
array(
'id' => 3 ,
'name' => 'Monkey',
'parent' => 4
),
array(
'id' => 4 ,
'name' => 'Animal',
'parent' => 0
),
array(
'id' => 5 ,
'name' => 'apple',
'parent' => 1
),
array(
'id' => 6 ,
'name' => 'Cat',
'parent' => 4
),
array(
'id' => 7 ,
'name' => 'Animal Water',
'parent' => 1
),
array(
'id' => 8 ,
'name' => 'fish',
'parent' => 7
),
array(
'id' => 9 ,
'name' => 'frog',
'parent' => 7
)
);
那麼我想重組該數組是這樣
$fix = array(
array(
'id' => 4 ,
'name' => 'Animal',
'parent' => 0,
'child' => array(
array(
'id' => 7 ,
'name' => 'Animal Water',
'parent' => 1,
'child' => array(
array(
'id' => 8 ,
'name' => 'fish',
'parent' => 7
),
array(
'id' => 9 ,
'name' => 'frog',
'parent' => 7
)
)
),
array(
'id' => 3 ,
'name' => 'Monkey',
'parent' => 4
),
array(
'id' => 6 ,
'name' => 'Cat',
'parent' => 4
),
)
),
array(
'id' => 1 ,
'name' => 'fruit',
'parent' => 0,
'child' => array(
array(
'id' => 2 ,
'name' => 'banana',
'parent' => 1
),
array(
'id' => 5 ,
'name' => 'apple',
'parent' => 1
)
)
)
);
所以我嘗試使用這個功能,但沒有幫助我。
$GLOBALS['viyancs'] = array();
$GLOBALS['i'] = 0;
function finding_parent($categories) {
foreach ($categories as $value) {
//finding parent
if ($value['parent'] === 0) {
$GLOBALS['viyancs'][$GLOBALS['i']][$value['id']]= $value;
$GLOBALS['i']++;
continue;
}
if (isset($GLOBALS['viyancs'][$GLOBALS['i']][$value['parent']])) {
$GLOBALS['viyancs'][$GLOBALS['i']][$value['parent']]['child']= $value;
}
$GLOBALS['i']++;
}
return $GLOBALS['viyancs'];
}
var_dump(finding_parent($categories));
還有其他建議嗎?
看起來好像你基本上構建了一個嵌套的導航系統......我發現要做到這一點的最好方式是將其解析爲XML(使用DOMDocument),然後可以將id分配給節點(如'id =「 c {$ iCatId}')並通過標準的DOM操作將子節點附加到父母身上。最大的優點是可以使用XPath在樹的底部進行導航或開始,並且可以非常輕鬆地進行工作......當然,缺點是必須將所有內容解析爲XML - 但這比遞歸循環我想。 – CD001
hii,看起來我聽到了另一個新的解決方案,你能解釋一下嗎?或者給我參考一下你的建議? – viyancs
我在幾年前的博客上寫了一篇關於它的小文章......我將發佈它的一個版本作爲答案。 – CD001