2011-07-21 2 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の配列には、要素id = 2-6を含む配列の 'children'要素があります。あなたはその事例を教えてください。ありがとう。 – 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

この行では、定義済みのインデックスエラーが発生しています。 $ phase ['children'] = $ treearr [$ phase ['id']] ['children']; '解決策はありますか?私がその行にコメントするとき、それは魅力のように働く。 –

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); 
関連する問題