1

私はそのようなforeachを持っています:

foreach ($posts as $post) {

    $postArray[] = array(
    "title" => $post->title,
    "date" => date("d.m.Y", $post->created),
    // ... etc
  );

  var_dump($postArray);
}

$postArrayはこのループの外側では削除されませんが、各ループの反復は、新しい変数を作成するのではなく、この変数がグローバルであるかのように既存の配列に追加されます。

これはPHP設定ですか?私は、デフォルトのWAMPが提供する設定から実際に設定を変更していないことを念頭に置いてください。何か案は?

4

4 に答える 4

3

これはグローバル変数ではありませんが、構文の記述方法では、最初の反復後にグローバルになります。これは、のarray_push省略形を使用しているためです[]。通常、これを次の同義語として使用しますarray_push()

あなたがしたいのはこれです-

$postArray = array(
  ...
);

そうすれば、反復ごとに、まったく新しい$postArrayオブジェクトを取得できます。

于 2012-11-18T15:15:53.383 に答える
2

PHPには、ブロックレベルではなく、関数レベルのスコープがあります。このコードが関数/クラスメソッドにない場合、またはループではなく関数に対してローカルである場合、変数は実際にグローバルです。

于 2012-11-18T15:19:00.210 に答える
1

$myArray[] = $newVariable;配列に追加されます。

新しい配列が必要な場合は、各ループの開始時に配列を再宣言するか、空にします。

$myArray = array();
$myArray[] = $data;
于 2012-11-18T15:17:13.160 に答える
-2

foreachは配列とオブジェクトでのみ機能し、異なるデータ型の変数または初期化されていない変数で使用しようとするとエラーが発生します。

ここでは、それ自体が配列をサポートするforeachを使用しています。

于 2012-11-18T15:18:55.730 に答える