我想问一下如何转换如下的数组:
$arr = array(
array(
'id' => 1,
'name' => 'Home',
'link_to' => 'home.php',
'parent' => 0,
'level' => 1
),
array(
'id' => 2,
'name' => 'About',
'link_to' => 'about.php',
'parent' => 0,
'level' => 1
),
array(
'id' => 3,
'name' => 'About Me',
'link_to' => 'about-me.php',
'parent' => 2,
'level' => 2
),
array(
'id' => 4,
'name' => 'About Us',
'link_to' => 'about-us.php',
'parent' => 2,
'level' => 2
),
array(
'id' => 5,
'name' => 'Contact Us',
'link_to' => 'contact-us.php',
'parent' => 4,
'level' => 3
),
array(
'id' => 6,
'name' => 'Blog',
'link_to' => 'blog.php',
'parent' => 0,
'level' => 1
),
);
进入这一个:
$result = array(
'Home',
'About' => array(
'About Me',
'About Us' => array(
'Contact Us'
)
),
'Blog'
);
有元素'parent'id可以告诉父数组(0 = root),还有元素'level'。
我需要那种数组,所以我可以使用codeigniter helper中的ul()
函数创建列表。
答案 0 :(得分:1)
我必须做类似的事情来从数据行创建一个树。
所以,你必须使用引用,它比其他方法更容易。
接下来的代码会出现类似于你想要的东西(我认为如果你以后做出更改会有更好的结构)
<?php
$arr = array(
array(
'id' => 1,
'name' => 'Home',
'link_to' => 'home.php',
'parent' => 0,
'level' => 1
),
array(
'id' => 2,
'name' => 'About',
'link_to' => 'about.php',
'parent' => 0,
'level' => 1
),
array(
'id' => 3,
'name' => 'About Me',
'link_to' => 'about-me.php',
'parent' => 2,
'level' => 2
),
array(
'id' => 4,
'name' => 'About Us',
'link_to' => 'about-us.php',
'parent' => 2,
'level' => 2
),
array(
'id' => 5,
'name' => 'Contact Us',
'link_to' => 'contact-us.php',
'parent' => 4,
'level' => 3
),
array(
'id' => 6,
'name' => 'Blog',
'link_to' => 'blog.php',
'parent' => 0,
'level' => 1
),
);
$refs = array();
foreach($arr as &$item) {
$item['children'] = array();
$refs[$item['id']] = $item;
}
unset($item); // To delete the reference
// We define a ROOT that is the top of each elements
$refs[0] = array(
'id' => 0,
'children' => array()
);
foreach($arr as $item) {
if($item['id'] > 0) {
$refs[$item['parent']]['children'][] = &$refs[$item['id']];
}
}
$result = $refs[0];
unset($refs); // To delete references
var_dump($result);
?>