2016-05-02 2 views
0

I次の配列があります。PHP再帰 - 1つのレベルで表示子アレイ

$example = array(
array(
    'id' => 63, 
    'parentid' => 0, 
    'char_value' => 'End poverty in all its forms everywhere', 
    'param_value' => 1, 
    'children' => array(
     array(
      'id' => 84, 
      'parentid' => 63, 
      'char_value' => 'test 1', 
      'param_value' => 1 
     ), 
     array(
      'id' => 85, 
      'parentid' => 63, 
      'char_value' => 'test 2', 
      'param_value' => 1 
     ) 
    ) 
)); 

と再帰のための次の関数:

function drawPropertyTree($array, $parent){ 
$result = array(); 
foreach ($array as $k => $v) { 

    $pieces = explode(" ", $v['char_value'], 6); 
    $name = implode(" ", array_splice($pieces, 0, 3)); 

    $result[] = array(
     'id' => $v['id'], 
     'parent' => $parent, 
     'text' => $v['param_value'] . " " . $name 
    ); 

    if (isset($v['children'])) { 
     $result[] = drawPropertyTree($v['children'], $v['id']); 
    } 
} 
return $result;} 

は、私はすべてのサブを一覧表示したいのですが親ノードを持つ同じレベルの配列。ここでworking sampleであり、これは現在の出力です:

Array 
(
[0] => Array 
    (
     [id] => 63 
     [parent] => 0 
     [text] => 1 End poverty in 
    ) 

[1] => Array 
    (
     [0] => Array 
      (
       [id] => 84 
       [parent] => 63 
       [text] => 1 test 1 
      ) 

     [1] => Array 
      (
       [id] => 85 
       [parent] => 63 
       [text] => 1 test 2 
      ) 

    ) 
) 

この希望する結果:

Array (
[0] => Array 
    (
     [id] => 63 
     [parent] => 0 
     [text] => 1 End poverty in 
    ) 
[1] => Array 
     (
      [id] => 84 
      [parent] => 63 
      [text] => 1 test 1 
     ) 

[2] => Array 
     (
      [id] => 85 
      [parent] => 63 
      [text] => 1 test 2 
     ) 

答えて

1

ずに - あなたは任意の深さのサポートを必要とすることを考える:

function drawPropertyTree($array, $parent) 
{ 
    $result = array(); 
    foreach ($array as $k => $v) { 

     $pieces = explode(" ", $v['char_value'], 6); 
     $name = implode(" ", array_splice($pieces, 0, 3)); 

     $result[] = array(
      'id'  => $v['id'], 
      'parent' => $parent, 
      'text' => $v['param_value'] . " " . $name 
     ); 

     if (isset($v['children'])) { 
      // drawPropertyTree returns an array 
      // which must be merged into the existing array 
      $result = array_merge($result, drawPropertyTree($v['children'], $v['id'])); 
     } 
    } 
    return $result; 
} 
+0

Doh ...これで1時間を過ごした...ありがとう! –

0

新しい空の配列を作成し、forループ内のすべての要素をプッシュし、プッシュする子どもたちをチェックそれらを新しい配列にも置き換えます。必要なあなたの関数内だけでわずかな変化の任意の再帰

+0

あなたは、このための任意のスニペットを提供していただけますか? –

+0

ああ、私は今電車に乗っている。今の自分を試して、私は1時間後に何かをするかもしれない – misher