创建第n级表单数组列表的数组树 [英] Create array tree of nth level form array list
本文介绍了创建第n级表单数组列表的数组树的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我只有第N个级别数组返回,此函数返回所有子级列表
I have only Nth number of level array return, this function return all children list
$arr = array(
array('id'=>100, 'parentid'=>0, 'name'=>'a'),
array('id'=>101, 'parentid'=>100, 'name'=>'a'),
array('id'=>102, 'parentid'=>101, 'name'=>'a'),
array('id'=>103, 'parentid'=>101, 'name'=>'a'),
);
$new = array();
foreach ($arr as $a){
$new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));
print_r($tree);
function createTree(&$list, $parent){
$tree = array();
foreach ($parent as $k=>$l){
if(isset($list[$l['id']])){
$l['children'] = createTree($list, $list[$l['id']]);
}
$tree[] = $l;
}
return $tree;
}
此函数返回数组中的所有数据.
this function return all data in array.
此函数返回无法返回的特定级别已完成,然后中断并返回值
this function return cant return the particular level is complete then break and return values
推荐答案
尝试这样.
$array = array(
array('id'=>100, 'parentid'=>0, 'name'=>'a'),
array('id'=>101, 'parentid'=>100, 'name'=>'a'),
array('id'=>102, 'parentid'=>101, 'name'=>'a'),
array('id'=>103, 'parentid'=>101, 'name'=>'a')
);
echo '<pre>';
print_r(array_to_tree($array));
exit;
用于转换树的功能.
function array_to_tree(array $array, $parent_id = 0)
{
$array = array_combine(array_column($array, 'id'), array_values($array));
foreach ($array as $k => &$v) {
if (isset($array[$v['parentid']])) {
$array[$v['parentid']]['children'][$k] = &$v;
}
unset($v);
}
return array_filter($array, function($v) use ($parent_id) {
return $v['parentid'] == $parent_id;
});
}
输出将是
根据您的要求,您只需要2个级别,则不要使用递归函数.//从foreach中删除 createTree
As per your requirement you want only 2 levels then don't use recursive function. //remove createTree from foreach
function createTree(&$list, $parent){
$tree = array();
foreach ($parent as $k=>$l){
if(isset($list[$l['id']])){
$l['children'] = $list[$l['id']]; //remove createTree from here.
}
$tree[] = $l;
}
return $tree;
}
这篇关于创建第n级表单数组列表的数组树的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文