フラットなmysql行をツリー構造に変換しようとしています。
$categories = array(
array(
'id' => '1',
'name' => 'root',
'parent' => '0',
),
array(
'id' => '2',
'name' => 'first',
'parent' => '1',
),
array(
'id' => '3',
'name' => 'first',
'parent' => '1',
),
array(
'id' => '4',
'name' => 'second',
'parent' => '3',
),
);
最初にすべての第1レベルのノードを初期化し、次にbuild_tree
各ノードを呼び出します。
$hierarchy = array();
// loop through and get each root node
foreach($categories as $key => $category) {
if ($category['parent'] == 0) {
// initialize this root
$hierarchy[$category['id']] = $category;
$hierarchy[$category['id']]['children'] = array();
// remove this from categories
unset($categories[$key]);
$this->build_tree($hierarchy[$category['id']], $categories);
}
}
return $hierarchy;
}
function build_tree(&$node, &$categories) {
foreach ($categories as $key => $category) {
// check if this node is the parent
if ($node['id'] === $category['parent']) {
$node['children'][$category['id']] = $category;
$node['children'][$category['id']]['children'] = array();
unset($categories[$key]);
$this->build_tree($category, $categories);
}
}
}
これは、ツリーの第1レベルと第2レベルのみを返します。
array
1 =>
array
'id' => string '1' (length=1)
'name' => string 'root' (length=4)
'parent' => string '0' (length=1)
'children' =>
array
2 =>
array
'id' => string '2' (length=1)
'name' => string 'first' (length=5)
'parent' => string '1' (length=1)
'children' =>
array
empty
3 =>
array
'id' => string '3' (length=1)
'name' => string 'first' (length=5)
'parent' => string '1' (length=1)
'children' =>
array
empty
build_tree
それが到達したときの内部は、id=2
子供をうまく作成しています。(id = 2の子が1つあることを確認し、それを'children'に正しく追加します)
それはそれを保存していないだけです!誰かが私が間違っていることを見ることができますか?私がvar_dump
階層化すると、3番目がで正常に作成されていても、それは1番目と2番目のレベルであり、3番目ではありませんbuild_tree
。どんな助けでも大歓迎です。Ty。