ここに単純なループがあります
$list = array("A", "B", "C","D");
foreach ($list as $var) {
print(current($list));
}
出力 (デモ)
BBBB // Output for 5.2.4 - 5.5.0alpha4
BCD // Output for 4.4.1
AAAA // Output for 4.3.0 - 4.4.0, 4.4.2 - 5.2.3
質問 :
- 誰かが何が起こっているのか説明してもらえますか?
- なぜ私はABCDを取得していないのですか
- 配列のコピーが作成された場合でも、現在の安定版では取得する
foreach
必要がありますが取得できませんAAAA
PHP
注*私は単純に使用できることを知っていますprint $var
が、PHP DOCから
current — 配列内の現在の要素を返すcurrent()関数は、内部ポインタが現在指している配列要素の値を返すだけです。ポインターはまったく移動しません。内部ポインターが要素リストの末尾を超えている場合、または配列が空の場合、current() は FALSE を返します。
更新 1 - 新しい観測
ダニエル・フィゲロアに感謝:関数でラップcurrent
するだけで、異なる結果が得られます
foreach ( $list as $var ) {
print(item($list));
}
function item($list) {
return current($list);
}
出力 (デモ)
BCDA // What the hell
質問 :
- 「BBBB」を取得しないのはなぜですか?
foreach
関数内で current をラップすると、出力にどのような影響がありますか?- 余分な「A」はどこから来たのですか?
更新 2
$list = array("A","B","C","D");
item2($list);
function item2($list) {
foreach ( $list as $var ) {
print(current($list));
}
}
出力 (デモを参照)
AAAA // No longer BBBB when using a function
質問 :
AAAA
関数内でループを実行することと関数の外で実行することの違いは何BBBB
ですか