PHP递归函数输出

时间:2014-04-13 10:55:48

标签: php recursion

使用以下代码:

$array = array(
    'id' => '1',
    'parent_id' => '0',
    'name' => 'top level',
    'children' => array(
        'id' => '2',
        'parent_id' => '1',
        'name' => 'second level',
        'children' => array(
            'id' => '3',
            'parent_id' => '2',
            'name' => 'third level'     
        )
    )
);

function generateFlatArray($array){

  $output .= '[select id="' . $array['id'] . '" name="' . $array['name'] . '"]';

  if(is_array($array['children'])){
    generateFlatArray($array['children']);
  }

  return $output;

}

print_r(generateFlatArray($array));

为什么输出:

[select id="1" name="top level"]

而不是我所期待的,这是:

[select id="1" name="top level"][select id="2" name="second level"][select id="3" name="third level"]

我讨厌递归。我讨厌递归。我讨厌递归。谢谢。

3 个答案:

答案 0 :(得分:2)

您没有使用函数的返回值,只使用了第一个$output

function generateFlatArray($array){

   $output .= '[select id="' . $array['id'] . '" name="' . $array['name'] . '"]';

   if(is_array($array['children'])){
     $output .= generateFlatArray($array['children']);
   }

   return $output;
}

答案 1 :(得分:1)

因为你没有用递归步骤的返回值做任何事情。

$output .= generateFlatArray($array['children']);

这就是我想你想要的。

答案 2 :(得分:1)

因为您还必须在递归调用期间附加输出:

if(is_array($array['children'])){
    $output .= generateFlatArray($array['children']);
}