1

だから、私はこれを持っています:

$abc = array('a','b','c');
foreach ($abc as $k => &$a) {
    echo $a;
    if ($k == 1)
        $abc[] = 'd';
}

期待どおりに動作し、foreachを4回繰り返して、次のようにします。

abcd

しかし今、私がこれを持っているとき:

$myvar = $this->someModel->return_an_array_as_result(); // returns array([0] => array('a' => 'b'))

foreach ($myvar as $myvar_key => &$mv){
    $myvar[] = array('e' => 'f');
    var_dump($myvar);
    if ($myvar_key == 5) die;
}

foreachは1回だけ実行されます。

内部ポインタをリセットするときにforeachがどのように機能するかについて何か考えはありますか?

4

2 に答える 2

1

これは、実際にアレイのコピーforeachに取り組んでいるためです。反復中に配列を変更することを計画している場合は、従来のループを使用してください。for

詳細については、のPHPドキュメントを参照してくださいforeach。また、反復中に要素を変更する場合は、要素を変更でき&$referenceます(これについての詳細は、foreachドキュメントにも記載されています)。

于 2012-10-08T18:01:27.387 に答える
1

私はあなたのポイントをArrayObject理解しています、あなたはまだ配列をループしている間に配列に追加することを可能にする使用することができます

$myvar = new ArrayObject(array('a' => 'b'));
$x = 0;
foreach ( $myvar as $myvar_key => $mv ) {
    $myvar->append(array('e' => 'f'));
    if (($x >= 4))
        break;
    $x ++;
}
var_dump($myvar);

出力

object(ArrayObject)[1]
  public 'a' => string 'b' (length=1)
    array
      'e' => string 'f' (length=1)
    array
      'e' => string 'f' (length=1)
    array
      'e' => string 'f' (length=1)
    array
      'e' => string 'f' (length=1)
    array
      'e' => string 'f' (length=1)
于 2012-10-08T18:13:25.413 に答える