使用以下代码:
$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"]
我讨厌递归。我讨厌递归。我讨厌递归。谢谢
因为您还必须在递归调用期间追加输出:
if(is_array($array['children'])){
$output .= generateFlatArray($array['children']);
}
因为您并没有对递归步骤的返回值进行任何操作。
$output .= generateFlatArray($array['children']);
这就是我认为你想要的。
您没有使用函数的返回值,只使用了第一个$out
。
function generateFlatArray($array){
$output .= '[select id="' . $array['id'] . '" name="' . $array['name'] . '"]';
if(is_array($array['children'])){
$output .= generateFlatArray($array['children']);
}
return $output;
}
问题内容: 是否可以具有递归和匿名的PHP函数?这是我尝试使其工作,但未传入函数名称。 我还知道这是实现阶乘的一种不好方法,这只是一个例子。 问题答案: 为了使其正常工作,您需要传递$ factorial作为参考
问题 你想在一个函数中调用相同的函数。 解决方案 使用一个命名函数: ping = -> console.log "Pinged" setTimeout ping, 1000 若为未命名函数,则使用 @arguments.callee@: delay = 1000 setTimeout((-> console.log "Pinged" setTimeout arg
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n 所以,fact(n)可以表示为n x fact(n-1),
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n)=n!=1\times2\times3\times\cdot\cdot\cdot\times(n-1)\times n=(n-1)!\times n=fact(n-1)\times n
我将下面的函数放在一个类中 我尝试在这个函数中再次调用它(我在这个函数
我还不太理解递归,我有一些作业我不能解决。有人有主意吗? 任务1:实现一个int方法max(int[]arr,int i),该方法返回arr中所有元素的最大值和索引 这是我迄今为止的代码: 实际上它是有效的,但它的风格很差,所以我的问题是:如果没有私有静态int max,我如何实现递归方法?我不允许向该方法添加第三个参数。 任务2:实现一个布尔方法包含值(int[]arr,int val),如果a