2011-06-30 5 views
0
$test = array(1, 2, 3, 4, 5); 


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

これは出力を生成し、 "122334455" PHP 5.2.0 に出力が "13243545" がのForeachイテレータ行動差5.3.3

方法PHP 5.3.3で生成されますイテレータを制御することによって5.3.3の5.2.0の出力を最も効率的に再現できますか?

これは、イテレータがforeach内の5.2では動作しますが、5.3のforeachでは動作しないため、バグかもしれません。

+0

"122334455"または "13243545"という出力を希望しますか? –

+0

私は "122334455"を望みます。私はforeachのイテレータを制御する手段が必要です。私はnext()とprev()でそのコントロールを使用していますが、効果は5.3.3のループで次の反復まで一時的です。 – FinalForm

+3

なぜこの動作を最初に使用しますか?あなたは本当にイテレータを変更してはいけません。 –

答えて

2

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]; 
    } 
} 
+0

これは「多少なりとも」許容されます。あなたのうちの誰かがより良い解決策を持っていますか? – FinalForm

+0

が実装されました。私は何をしなければならなかったのですか。ありがとう。正確には私が探しているものではありませんが、私はこのようにしなければならないと思います。私はあなたに信用を与えました。 – FinalForm

+0

私はPHPで作業している人々がこのバグを修正してくれることを願っています。 iterablesに関してforeachの制御権を持つことは非常に面倒です。 – FinalForm

0

知らんは、あなたが求めているもの:あなたはループ "は、" より多くの説明を使用することができます

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

プリント:122334455を元の質問

+0

foreach()を使って反復処理をしているときに、配列のイテレータを制御する手段を求めています。あなたの解決策は、私が探しているものではないスタック、ポッピング、シフトに関するものです。配列にデータを保持したままイテレータを制御するわけではありません。 Aは反復されている間に配列をトラバースする手段です。ごめんなさい。 – FinalForm

+0

@finalform:あなたはあなたの質問 – dynamic

+0

kを完全にcahngeして、それを変更する必要があります。 – FinalForm

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; 
} 
関連する問題