簡體   English   中英

將嵌套的 foreach 樹轉換為遞歸 php function

[英]convert nested foreach tree into recursive php function

需要從下面的代碼中遞歸 function。 嘗試了多種方法但失敗了。 因為我不知道這棵樹會有多深。 深度可能會根據數據而變化。

$tot_terms = [];
foreach ($tree as $key => $val) {
      $tot_terms[$val->depth][] = $val->tid;
      if (!empty($val->children)) {
        foreach ($val->children as $key1 => $val1) {
          $tot_terms[$val1->depth][] = $val1->tid;
          if ($val1->children) {
            foreach ($val1->children as $key2 => $val2) {
              $tot_terms[$val2->depth][] = $val2->tid;
              if ($val2->children) {
                foreach ($val2->children as $key3 => $val3) {
                  $tot_terms[$val3->depth][] = $val3->tid;
                  if ($val3->children) {
                    foreach ($val3->children as $key4 => $val4) {
                      $tot_terms[$val4->depth][] = $val4->tid;
                      if ($val4->children) {
                        foreach ($val4->children as $key5 => $val5) {
                          $tot_terms[$val5->depth][] = $val5->tid;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }

結果應該是這樣的

Array
(
    [0] => Array
        (
            [0] => 20011
            [1] => 19991
            [2] => 20000
        )
    [1] => Array
        (
            [0] => 20010
            [1] => 19995
            [2] => 19994
            [3] => 19990
            [4] => 20005
            [5] => 19985
            [6] => 19999
            [7] => 19998
        )
    [2] => Array
        (
            [0] => 20012
            [1] => 20006
            [2] => 19996
            [3] => 19993
            [4] => 19989
            [5] => 19988
            [6] => 20004
            [7] => 19984
            [8] => 20001
        )
    [3] => Array
        (
            [0] => 20007
            [1] => 20009
            [2] => 20008
            [3] => 19992
            [4] => 19987
            [5] => 19986
            [6] => 19983
            [7] => 19982
            [8] => 20003
            [9] => 20002
        )
    [4] => Array
        (
            [0] => 19997
        )
    [5] => Array
        (
            [0] => 19981
        )
)

根據其他帖子嘗試過,但失敗了。 輸入 $tree 是數組和 object。 如果需要,將在下一條評論中發布,因為總人數超過預期

我們可以使用處理程序 function 來存儲數據。 請注意,我們通過引用傳遞數組。

function func( $item, &$data ) {
    if (  is_empty( $item ) ) return;
    if (  ! is_object( $item ) ) return;

    foreach ($item as $key => $val) {
      $data[$val->depth][] = $val->tid;
      func( $val->children, $data );
    }
}

function func_handler( $item ) {
    $data = [];
    func( $item, $data );
    return $data;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM