2011-12-29 8 views
3

どのように私はこれをPHPで達成することができますか?方法があるphpのforループ中に配列に要素をプッシュ

$j = array(1,2,3); 
foreach ($j as $i) 
{ 
    echo $i . "\n"; 
    if ($i <= 3) 
     array_push($j, 5); 
} 

は123555を印刷する必要がありますが、それは123

で停止:そこに私はそう、彼らはまた、ループスルー取得をループしてる配列に複数の要素をプッシュする必要がある場合がありますこの周りのPHPで?

答えて

3

foreachは、元の配列ではなく、特定の条件下で配列のコピーに対して機能します。そのため、変更がループに反映されていないことがわかります。

参照することによって、あなたのループあなたが期待される出力が得られます:

foreach ($j as &$i) 
{ 
    // ... 
} 

出力:

 
1 
2 
3 
5 
5 
5 
+0

ohh大丈夫、forループに変更して動作します。 – user740521

+0

@ user740521:もう少し詳しい情報を追加しました。 –

1

ながら、あなたがしようとしないのはなぜ:

$i = 0; 
$j = array(1, 2, 3); 

while (count($j)) 
{ 
    echo array_shift($j); 

    if ($i++ <= 3) 
    { 
     array_push($j, 5); 
    } 
} 
2

がに&を追加参照を渡します。デフォルト値(コピー$j)が渡されます。

$j = array(1,2,3); 
foreach ($j as $i=>&$v) 
{ 
    echo "$i=>$v\n"; 
    if ($i <= 3) 
     array_push($j, 5); 
} 
2

PHPはこれをサポートしていません。マニュアルから:

foreachは、ループ内で内部配列ポインタを変更すると、予想外の動作につながる可能性があります。私はマニュアルが言ったことに基づいて、これに依存しないだろうが

http://php.net/manual/en/control-structures.foreach.php

しかし、このコードは、動作します。

<? 
header('content-type: text/plain'); 

$j = array(1,2,3); 

foreach ($j as &$v) 
{ 
    echo "$v\n"; 
    if ($v <= 3) 
    { 
     array_push($j, 5); 
    } 

} 
関連する問題