【问题标题】:How to convert DB table with parent son relation to multi-dimensional array如何将具有父子关系的数据库表转换为多维数组
【发布时间】:2015-11-11 16:10:25
【问题描述】:

如何转换这样的数据库表:

变成这样的多维数组?

我尝试了如下递归循环,但无法正确显示。

function cost_centres_format($items)
{
    foreach ($items as $item) {
        echo $item->name.' - '.$item->parent_id;
        echo '<br/>';
        $sons = $this->purchase_order_model->get_cost_centre_sons($item->internal_purchase_order_cost_centre_id);
        if(count($sons)>0){
            $this->cost_centres_format($sons);
        }
    }
}

【问题讨论】:

    标签: php mysql recursion multidimensional-array


    【解决方案1】:

    这是我的解决方案:

    function cost_centres_format($items,$parent_id,$array=array()) {
        foreach($items as $item) {
            if($item->parent_id == $parent_id) {
                $array[] = $item;
                if($item->internal_purchase_order_cost_centre_id>0) {
                    $array = cost_centres_format($items,$item->internal_purchase_order_cost_centre_id,$array);
                }
            }
        }
        return $array;
    }
    $array = cost_centres_format($items,0);
    

    由于其原始订单,柴油 (id:5) 将低于车辆维护 (id:4)。您可以按名称进行额外排序,但在您的示例中,Capital (id:3) 低于 Overheads (id:2)。

    【讨论】:

      【解决方案2】:

      上面的代码不会产生多维数组,而是像这样产生一维数组:

      Array
      (
       [0] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 1
              [name] => Direct Expenses                                                                                                                                                                                                                                                
              [parent_id] => 0
          )
      
      [1] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 4
              [name] => Vehicle Maintenance                                                                                                                                                                                                                                            
              [parent_id] => 1
          )
      
      [2] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 9
              [name] => CN09 AKO                                                                                                                                                                                                                                                       
              [parent_id] => 4
          )
      
      [3] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 10
              [name] => DY52 BYO                                                                                                                                                                                                                                                       
              [parent_id] => 4
          )
      
      [4] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 14
              [name] => MX08 MVJ                                                                                                                                                                                                                                                       
              [parent_id] => 4
          )
      
      [5] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 15
              [name] => YJ55 TXA                                                                                                                                                                                                                                                       
              [parent_id] => 4
          )
      
      [6] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 5
              [name] => Diesel                                                                                                                                                                                                                                                         
              [parent_id] => 1
          )
      
      [7] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 6
              [name] => Vehicle Rent                                                                                                                                                                                                                                                   
              [parent_id] => 1
          )
      
      [8] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 11
              [name] => Vehicle Repair                                                                                                                                                                                                                                                 
              [parent_id] => 1
          )
      
      [9] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 16
              [name] => CN09 AKO                                                                                                                                                                                                                                                       
              [parent_id] => 11
          )
      
      [10] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 17
              [name] => DY52 BYO                                                                                                                                                                                                                                                       
              [parent_id] => 11
          )
      
      [11] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 18
              [name] => MX08 MVJ                                                                                                                                                                                                                                                       
              [parent_id] => 11
          )
      
      [12] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 19
              [name] => YJ55 TXA                                                                                                                                                                                                                                                       
              [parent_id] => 11
          )
      
      [13] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 2
              [name] => Overheads                                                                                                                                                                                                                                                      
              [parent_id] => 0
          )
      
      [14] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 12
              [name] => Internet Service                                                                                                                                                                                                                                               
              [parent_id] => 2
          )
      
      [15] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 13
              [name] => Warehouse Rent                                                                                                                                                                                                                                                 
              [parent_id] => 2
          )
      
      [16] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 3
              [name] => Capital                                                                                                                                                                                                                                                        
              [parent_id] => 0
          )
      
      [17] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 7
              [name] => New Stock                                                                                                                                                                                                                                                      
              [parent_id] => 3
          )
      
      [18] => stdClass Object
          (
              [internal_purchase_order_cost_centre_id] => 8
              [name] => New Vehicle                                                                                                                                                                                                                                                    
              [parent_id] => 3
          )
      

      )

      【讨论】:

      • Joseph Assem Sobhy:这不是答案。当您这样做时,没有人会收到通知。而是在相应的答案中添加评论。你应该添加一个你想要你的数组的例子(而不是一个 excel 屏幕截图)。
      猜你喜欢
      • 1970-01-01
      • 2021-06-13
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多