2011-07-21 83 views
1

我發現了一個代碼片段,它接收了一個數組並將其組織在父級子級多級組織中。像下面這樣將php數組組織成多層次的子級父組織

$phases = array(
    array('id'=>1,'name'=>'First Step','parent_id'=>0,'percentage'=>.50,'order'=>1), 
    array('id'=>2,'name'=>'Second Step','parent_id'=>0, 'percentage'=>.50,'order'=>2), 
    array('id'=>3,'name'=>'Third Step','parent_id'=>2, 'percentage'=>.25,'order'=>3), 
    array('id'=>4,'name'=>'Fourth Step','parent_id'=>2, 'percentage'=>.25,'order'=>1), 
    array('id'=>5,'name'=>'Fifth Step','parent_id'=>2, 'percentage'=>.25,'order'=>1), 
    array('id'=>6,'name'=>'Sixth Step','parent_id'=>2, 'percentage'=>.25,'order'=>1), 
    ); 

它能夠將所有的子數組添加到他們尊敬的父項下。我找不到那個代碼。人有一個想法

+1

比如,結果會是id = 2的數組會有一個'children'元素,它是一個包含元素id = 2-6的數組?你能舉一個例子嗎?謝謝。 – Wiseguy

回答

1
<?php 
$phases = array(
    array('id'=>1,'name'=>'First Step','parent_id'=>0,'percentage'=>.50,'order'=>1), 
    array('id'=>2,'name'=>'Second Step','parent_id'=>0, 'percentage'=>.50,'order'=>2), 
    array('id'=>3,'name'=>'Third Step','parent_id'=>2, 'percentage'=>.25,'order'=>3), 
    array('id'=>4,'name'=>'Fourth Step','parent_id'=>2, 'percentage'=>.25,'order'=>1), 
    array('id'=>5,'name'=>'Fifth Step','parent_id'=>2, 'percentage'=>.25,'order'=>1), 
    array('id'=>6,'name'=>'Sixth Step','parent_id'=>2, 'percentage'=>.25,'order'=>1), 
    //just to add levels 
    array('id'=>7,'name'=>'7th Step','parent_id'=>5, 'percentage'=>.25,'order'=>1), 
    array('id'=>8,'name'=>'8th Step','parent_id'=>6, 'percentage'=>.25,'order'=>1) 
    ); 

$treearr = array('0' => array('children'=> array())); 
foreach($phases as $phase){ 
    if(!isset($treearr[$phase['id']]['children'])) $phase['children'] = $treearr[$phase['id']]['children']; 
    $treearr[$phase['id']] = $phase; 
    if(!isset($treearr[$phase['parent_id']])) $treearr[$phase['parent_id']] = array('children'=> array()); 
    $treearr[$phase['parent_id']]['children'][] = &$treearr[$phase['id']]; 
} 
$tree = $treearr[0]; 
unset($treearr); 
var_dump($tree); 
+0

我得到這條線的udefined索引錯誤。 'ifset($ treearr [$ phase ['id']] ['children']))$ phase ['children'] = $ treearr [$ phase ['id']] ['children'];任何解決方案?當我評論這條線時,它就像一個魅力。 – 2012-03-06 06:42:43

0

注意肯定你正在嘗試與落得什麼樣的結構,但也許這將讓你開始:

$multidim = array(); 
$multidim[0] = array(); 

foreach ($phases as $phase) { 
    $multidim[$phase['id']] = array(
     'name' => $phase['name'], 
     'children' => array(), 
     'percentage' => $phase['percentage'], 
     'parent_id' => $phase['parent_id'] 
    ); 
    $multidim[$phase['parent_id']]['children'][] = $phase['id']; 
} 

還是你想是這樣的:

$phases[0][2][3] = array('name' => 'Third Step', 'percentage' => 0.25, 'order' => 3);