2011-07-21 88 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);