使用以下代码:
$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"]
我讨厌递归。我讨厌递归。我讨厌递归。谢谢。
答案 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']);
}