PHP 5.2.0与PHP 5.3.3中的Foreach迭代器行为差异

时间:2011-06-30 23:32:48

标签: php iterator foreach next

$test = array(1, 2, 3, 4, 5);


foreach($test as $element)
{
    echo $element;        
    $element = next($test);         
    echo $element;
}

这将在PHP 5.2.0中生成输出“122334455” 输出“13243545”在PHP 5.3.3中生成

如何通过控制迭代器最有效地重现5.3.3中5.2.0的输出?

这可能是一个错误,因为迭代器在foreach中的5.2中工作,但在5.3的foreach中没有。

3 个答案:

答案 0 :(得分:2)

这似乎是与PHP相关的错误。您可以使用更具说明性的“for”循环:

$c = count($test);

for($i=0; $i < $c; $i++) {
    echo $test[$i];
    if(isset($test[$i+1])) {
        echo $test[$i+1];
    } else {
        echo $test[$i];
    }
}

答案 1 :(得分:1)

我的尝试:

$i = 1;
foreach($test as $element)
{
    echo $element;
    if (isset($test[$i])) {      
        $element = $test[$i];         
        echo $element;
    }

    $i++;
}

这也有效,但内存效率低下:

$test  = array(1, 2, 3, 4, 5);
$test2 = $test;

foreach($test as $element)
{
    echo $element;        
    $element = next($test2);         
    echo $element;
}

答案 2 :(得分:0)

不知道你在问什么..无论如何:

echo array_shift($test);
foreach($test as $v) {
 echo $v.$v;
}

打印:原始问题中提到的122334455