9

ループでは、foreachPHPは最初に配列全体を読み取るように見えるため、突然新しい項目を配列に追加する必要がある場合、それらはループによって処理されません。

$a = array (1,2,3,4,5,6,7,8,9,10);

foreach ($a as $b)
    {
        echo " $b ";
        if ($b ==5) $a[] = 11;
    }

印刷のみ: 1 2 3 4 5 6 7 8 9 10

4

3 に答える 3

20

ループしている配列の参照コピーを作成するだけです

$a = array(1,2,3,4,5,6,7,8,9,10);
$t = &$a; //Copy
foreach ( $t as $b ) {
    echo " $b ";
    if ($b == 5)
        $t[] = 11;
}

または単に使用するArrayIterator

$a = new ArrayIterator(array(1,2,3,4,5,6,7,8,9,10));
foreach ( $a as $b ) {
    echo "$b ";
    if ($b == 5)
        $a->append(11);
}

出力

 1 2 3 4 5 6 7 8 9 10 11

ライブデモを見る

于 2012-11-04T00:05:17.613 に答える
1

その-ok-to-ask-and-answer-your-own-questionsの精神に基づいて、これは私が見つけた最良の回避策です:それをwhileループに変換します。

$a = array (1,2,3,4,5,6,7,8,9,10);
$i = 0;
while ($i < count($a))
    {
        $b =  $a[$i];
        echo " $b ";
        if ($b ==5) $a[] = 11;
        $i++;
    }

きちんと出さない 1 2 3 4 5 6 7 8 9 10 11

于 2012-11-03T23:57:58.193 に答える
0

これを行う簡単な方法は、古い配列を保持する2番目の配列を作成することです。ループ中に、そこに新しい値を追加できます。

ループの終わりに、新しい配列には古い配列と新しい挿入された値が含まれます

于 2018-10-29T14:00:53.970 に答える