当前位置: 首页 > 知识库问答 >
问题:

PHP递归函数输出

井旺
2023-03-14

使用以下代码:

$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个答案

韦思淼
2023-03-14

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

if(is_array($array['children'])){
    $output .= generateFlatArray($array['children']);
}
商鸿哲
2023-03-14

因为您并没有对递归步骤的返回值进行任何操作。

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

这就是我认为你想要的。

顾永福
2023-03-14

您没有使用函数的返回值,只使用了第一个$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