递归函数:调用php函数本身

And*_*rdu 14 php function call self-reference

我只是想确保我做得对,这不会造成任何疑虑.

我有一个自称的功能,如果可以或不这样做需要你的批准?

<?php

function determine($the_array){
    foreach ($the_array as $key => $value) {
        switch ($key) {
            case 'in':
                    echo $value;
                break;

            case 'out':
                    echo $value;
                break;

            case 'level':
                    echo '<ul>';
                    determine($value);
                    echo '</ul>';
                break;

        }
    }

}
Run Code Online (Sandbox Code Playgroud)

这是数组:

$the_array = array(
    'in' => '<li>Simple IN</li>',
    'out' => '<li>Simple OUT</li>',
    'level' => array(
            'in' => '<li>Simple IN 2</li>',
            'out' => '<li>Simple OUT 2</li>',
            'level' => array(
                'in' => '<li>Simple IN 3</li>',
                'out' => '<li>Simple OUT 3</li>'
            ),
        ),
);
Run Code Online (Sandbox Code Playgroud)

这是最终的初始化:

echo '<ul>';
determine($the_array);
echo '</ul>';
Run Code Online (Sandbox Code Playgroud)

结果就是我想成为的样子,效果很好,但我不知道这是不是一个好习惯.

Flu*_*feh 35

递归函数是可以的 - 但如果你不确定你知道自己在做什么,那就太危险了.如果一个函数有可能在递归循环中结束(它一直在反复调用自己),你将会超时,内存耗尽或导致僵尸启示.

把递归电话想象成一把非常非常锋利的刀 - 在一位经验丰富的厨师手中,这是天堂里的一场比赛,在洗碗机的手中,这是一个等待发生的失落的手指.

PHP尝试玩得很好,并且默认情况下将递归深度限制为100(尽管可以更改)但是对于几乎所有情况,如果递归深度达到100,则事故已经发生并且PHP通过阻止任何其他行人来做出反应徘徊在交通中.:)

  • 或更短:递归函数不是一个坏习惯.:) (4认同)
  • 很好的答案,僵尸末日+1。 (3认同)
  • @ Virus721是和不,如果你不知道你在做什么,他们有点不好做法:) (2认同)