Php 递归在特定服务器上失败

Php 递归在特定服务器上失败,php,recursion,Php,Recursion,通常有递归函数。它迭代两次-第一次主迭代和第二次内部迭代: function recursive() { global $a, $stop; $stop++; foreach($a as $val) { echo $val; if ( $stop < 2 ) recursive(); } } $a = array(1,2); $stop = 0; recursive(); 函数递归(){ 全球$

通常有递归函数。它迭代两次-第一次主迭代和第二次内部迭代:

function recursive() {
    global $a, $stop;

    $stop++;

    foreach($a as $val) {
        echo $val;
        if ( $stop < 2 )
            recursive();
    }
}

$a = array(1,2);
$stop = 0;
recursive();
函数递归(){
全球$a,$stop;
$stop++;
外汇($a作为$val){
echo$val;
如果($stop<2)
递归();
}
}
$a=数组(1,2);
$stop=0;
递归();
结果是
1122
。一切正常。第二次迭代在第一次迭代中:
1(12)2

我更改了我的服务器和新服务器echos
112
。第一个循环在第二次迭代后停止:
1(12)

它总是停止。只有一次迭代是可能的,然后它就完成了


这个服务器有什么问题?这是php的选项还是什么?

尝试使用静态值而不是全局值(在您的情况下,全局值是无用的):

函数递归($a){ 静态$stop=0; $stop++; 外汇($a作为$val){ echo$val; 如果($stop<2) 递归(a美元); } } $a=数组(1,2); 递归(a美元);
演示:

您对参数
$a
和全局
$a
使用了相同的名称,这很可疑,不同版本的PHP中的行为可能会有所不同。虽然现在你编辑了代码——你确定这正是你拥有的代码吗?如果你将其传递到函数中,为什么要使用全局$a?@Truth我想知道同样的事情…@Truth似乎OP刚刚进行了忍者编辑:-P(仍然不明白OP为什么要使用gloabls…)所以你的问题中的这段代码就像你说的那样在服务器上运行,或者这是对你实际拥有的代码的简化?似乎对双方都太有用了。因此,它是特定于php版本的。globals在某处工作。但不是到处都是。你使用globals的理由是什么?
function recursive($a) {
    static $stop = 0;

    $stop++;
    foreach($a as $val) {
        echo $val;
        if ( $stop < 2 )
            recursive($a);
    }
}

$a = array(1,2);
recursive($a);