为了账号安全,请及时绑定邮箱和手机立即绑定

创建第 n 层形式数组列表的数组树

创建第 n 层形式数组列表的数组树

PHP
喵喵时光机 2021-12-24 16:01:44
我只有第 N 个级别数组返回,此函数返回所有子列表$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;}此函数返回数组中的所有数据。此函数返回不能返回特定级别完成然后中断并返回值
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

像这样尝试。


$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;

    });

}

输出将。

//img1.sycdn.imooc.com//61c57e880001a67205250604.jpg

根据您的要求,您只需要 2 个级别,然后不要使用递归函数。//从foreach中移除createTree


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;

}


查看完整回答
反对 回复 2021-12-24
?
翻阅古今

TA贡献1780条经验 获得超5个赞

这会预处理输入数据,以便处理它们的顺序是父 ID 降序,然后是 ID 升序。这意味着您可以一次性累积所有菜单(代码中的一些注释)......


$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')

);


print_r(array_to_tree($array));


function array_to_tree ( array $input ): array {

    $new = [];

    // Sort data in reverse order of parent ID, normal order of ID within parent ID

    usort($input, function ( $a, $b ) {

        return ( $a['parentid'] == $b['parentid'] )? 

            $a['id']- $b['id']:

            $b['parentid'] - $a['parentid'];

    });

    foreach ( $input as $inp )  {

        // Add data to parent ID

        $new[$inp['parentid']][$inp['id']] = $inp;

        // If data already exists for this ID, then this is also a parent

        if ( isset( $new[$inp['id']]) )   {

            // Add existing data to new item and remove old one

            $new[$inp['parentid']][$inp['id']] += $new[$inp['id']];

            unset($new[$inp['id']]);

        }

    }


    return $new;

}


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号