Поведенческий итератор Различие в поведении в PHP 5.2.0 и PHP 5.3.3 - PullRequest
0 голосов
/ 01 июля 2011
$test = array(1, 2, 3, 4, 5);


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

Это производит вывод "122334455" в PHP 5.2.0. Вывод "13243545" производится в PHP 5.3.3

Как воспроизвести вывод 5.2.0 в 5.3.3наиболее эффективно с помощью управления итератором?

Это может быть ошибкой, так как итератор работает в 5.2 внутри foreach, но не в 5.3 в foreach.

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

Кажется, ошибка связана с PHP.Вы можете использовать более понятный цикл «для»:

$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 голос
/ 01 июля 2011

Моя попытка:

$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;
}
0 голосов
/ 01 июля 2011

Не знаю, что вы спрашиваете .. в любом случае:

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

отпечатков: 122334455, как и в оригинальном вопросе

...