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

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

從上到下循環進入多維數組

從上到下循環進入多維數組

PHP
拉丁的傳說 2023-11-03 20:17:12
我有這棵樹:Array(    [0] => Array        (            [id] => 1            [parent_id] => 0            [title] => Parent Page            [children] => Array                        (                            [0] => Array                                (                                    [id] => 2                                    [parent_id] => 1                                    [title] => Sub Page                                                                                    ),                            [1] => Array                                (                                    [id] => 5                                    [parent_id] => 1                                    [title] => Sub Page 2                                                                                     )                        )        )    [1] => Array        (            [id] => 4            [parent_id] => 0            [title] => Another Parent Page        ))我正在尋找從上到下的顯示。并顯示類似這樣的內容:1 1.21.54但如果我有 id 3,它是 5 的葉子,我會喜歡這樣:11.21.51.5.34我進行了很多搜索,當我使用遞歸時,我的大腦是有限的。我已經嘗試過這個:function printAll($a){  foreach ($a as $v){      if (!array_key_exists('children', $v)){          debugLog($v['id']);          return;      }      else{          $arrayChildrens = $v['children'];          foreach($arrayChildrens as $c){              $arrayChildrens = $c['children'];              $this->printAll($arrayChildrens);          }      }  }}但不起作用..我嘗試開始只是為了顯示1254但我的目標是在 id 之前顯示 id 父母(就像我之前向你展示的那樣)多謝 !
查看完整描述

2 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

這個函數應該會給你你期望的輸出。


function printAll($a, $prefix = '') {


    //loop through $a

    foreach($a as $v) {


        //echo current level `id` with previous `$prefix`

        echo "{$prefix}{$v['id']}\n";


        //check if current level contains children

        if(!empty($v['children'])) {


            //clean up prefix to remove extra `.` at the end of prefixes

            $prev_prefix = rtrim($prefix, '.');


            //recurse printAll again passing the children as `$a` and a `$prefix` being the previous levels combined e.g `1.5`

            //also clean up extra periods at the start of the prefix

            printAll($v['children'], ltrim("{$prev_prefix}.{$v['id']}.", "."));

        }

    }

}

輸出:


1

1.2

1.5

1.5.3

4

使用正確的回報

通常,對于一個函數,您實際上希望該函數返回值,而不是自動將它們回顯到您的頁面。如果您希望此函數返回一個值數組而不是回顯它們,您可以這樣做:


function printAll($a, $level = '', $values = []) {

    foreach($a as $v) {

        $values[] = $value = "{$level}{$v['id']}";

        if(!empty($v['children'])) {

            $values = printAll($v['children'], "{$value}.", $values);

        }

    }

    return $values;

}

將會得到這樣的結果:


Array

(

    [0] => 1

    [1] => 1.2

    [2] => 1.5

    [3] => 1.5.3

    [4] => 4

)


查看完整回答
反對 回復 2023-11-03
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

這應該可以完成工作。


$arr = array(

    array(

        'id' => 1,

        'parent_id' => 0,

        'title' => 'Parent Page',

        'children' => array(

            array(

                'id' => 2,

                'parent_id' => 1,

                'title' => 'Sub Page',

            ),

            array(

                'id' => 5,

                'parent_id' => 1,

                'title' => 'Sub Page 2',

                'children' => array(

                    array(

                        'id' => 7,

                        'parent_id' => 5,

                        'title' => 'Sub Page',

                    ),

                    array(

                        'id' => 8,

                        'parent_id' => 5,

                        'title' => 'Sub Page 2',

                    )

                )

            )

        )

    ),

    array(

        'id' => 4,

        'parent_id' => 0,

        'title' => 'Another Parent Page',

    )

);

function printAll($arr, $parent = [])

{

    if (is_array($arr)) {

        foreach ($arr as $k => $v) {

            if (isset($v['id'])) {

                $parent[] = $v['id'];

                echo implode('.', $parent) . PHP_EOL;

            }

            if (isset($v['children'])) {

                printAll($v['children'], $parent);

            }

            array_pop($parent);

        }

    }

}

printAll($arr);

輸出


1

1.2

1.5

1.5.7

1.5.8

4

工作演示。



查看完整回答
反對 回復 2023-11-03
  • 2 回答
  • 0 關注
  • 138 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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