创建第n级表单数组列表的数组树 [英] Create array tree of nth level form array list

查看:52
本文介绍了创建第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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆