如何将父表关系的DB表转换为多维数组

时间:2015-08-18 15:58:53

标签: php mysql recursion multidimensional-array

如何转换数据库表:

enter image description here

进入像那样的多维数组?

enter image description here

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

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);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

以下是我的解决方案:

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);

Diesel(id:5)因其原始订单而低于Vehicle Maintenance(id:4)。您可以按名称进行其他排序,但在您的示例中,Capital(id:3)位于Overheads(id:2)之下。

答案 1 :(得分:0)

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

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
    )