亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

創建第 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;

    });

}

輸出將。

http://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 關注
  • 180 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號