2

ちょうどAHA を持っていた! ;誤って後にforeachループを追加した瞬間。おかしなことに、これはエラーをスローしませんでしたが、ループ配列内のすべてをスキップ (?) し、最後の要素に触れるだけです。

テストコード:

$test_array = array(
    'a' => 'one',
    'b' => 'two',
    'c' => 'three'
);
foreach ( $test_array as $key => $val );
    echo $val;

質問: なぜこれが起こるのですか?

4

6 に答える 6

4

セミコロンはステートメントを終了し、foreach ステートメントは関数に似ており、スコープを開きます。中かっこで複数行のスコープを開かない場合、スコープは次のセミコロンまで実行されるため、

foreach ( $test_array as $key => $val );

と同等です

foreach ( $test_array as $key => $val ) { }

なぜこのように振る舞うかについてのあなたの質問に答えると思います。

于 2013-05-31T19:52:37.617 に答える
4

あなたがするとき:

foreach ( $test_array as $key => $val );

ここでは、すべての foreach が実行されます (各要素を渡します) が、それを;利用する他の命令はありません。代わりに、すべての反復を終了する$valと、最後の要素の値が含まれます。次の命令:

echo $val;
于 2013-05-31T19:52:02.187 に答える
1

;ループを終了するため、次のようになります

foreach ( $test_array as $key => $val ){ /* do nothing */ }

ループの終わりに $val は最後のキーの値を持っているため、それをエコーし​​ます

于 2013-05-31T19:53:34.813 に答える
1

これは、C に似た構文を持つすべての言語の標準的な「機能」です。すなわち、

for (...);

意味

for (...) { }

また、あなたの場合、foreachループが終了した後$valも消えませんが、まだ存在し、最後に割り当てられた値を保持しています。

于 2013-05-31T19:53:46.860 に答える
1

ループが実行され、反復と条件チェックが実行されますが、それ以外は何も実行されません。次にechoコマンドが実行され、この時点$valで割り当てられた最後の値が含まれます。そして、割り当てられた最後の値は、ループからの最後の値でした。

于 2013-05-31T19:53:49.680 に答える
0

あなたがしているのは、すべてにループすることだけですが、最後の要素以外は何もしません。

于 2013-05-31T20:03:09.460 に答える