簡體   English   中英

從 PHP 中的數組創建樹結構

[英]Create Tree Structure from Array in PHP

我有一個這樣的數組:

array(
      array(id => 7, parent_id => 0, name => Current Assets)
      array(id => 8, parent_id => 0, name => Fixed Assets)
      array(id => 18, parent_id => 7, name => Assets)
      array(id => 38, parent_id => 18, name => Receivable)
      array(id => 38, parent_id => 18, name => Inventory)
      array(id => 39, parent_id => 0, name => Landed Cost Of Inventory)
      array(id => 40, parent_id => 38, name => Jazz Cash)
      array(id => 41, parent_id => 39, name => Advance to Vendors)
)

現在我需要一些有效的方法來將它轉換成這樣的樹結構。

array(
      array(id => 7, parent_id => 0, name => Current Assets, level=>0)
      array(id => 8, parent_id => 0, name => Fixed Asset, level => )
      array(id => 18, parent_id => 7, name => Assets, level => 1)
      array(id => 38, parent_id => 18, name => Inventory, level => 2)
      array(id => 39, parent_id => 0, name => Landed Cost Of Inventory, level => 0)
      array(id => 40, parent_id => 38, name => Jazz Cash, level => 3)
      array(id => 41, parent_id => 39, name => Advance to Vendors, level => 1)
)

我不需要向左或向右添加它們,我只需要我將傳遞給 jQgrid 的簡單級別。

將所有 id 按parent -> child的順序收集到一個數組中,其中parent_id是鍵,它有一個包含所有子 ID 的數組。 第二步是遍歷樹並分配等級。

<?php

function assignLevels(&$data){
    $kids = [];

    foreach($data as $d){
        $kids[ $d['parent_id'] ] = $kids[ $d['parent_id'] ] ?? [];
        $kids[ $d['parent_id'] ][] = $d['id'];
    }
    
    $data = array_column($data, null, 'id');
    traverseTree($kids, 0, $data);
    $data = array_values($data);
}


function traverseTree($kids, $id, &$data, $level = 0){
    foreach($kids[ $id ] as $sub_id){
        $data[ $sub_id ]['level'] = $level;
        if(isset($kids[ $sub_id ] )) traverseTree($kids, $sub_id, $data, $level + 1);
    }
}

assignLevels($data);

print_r($data);

在線演示

暫無
暫無

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

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