刚吃了一个啊哈!偶然添加;
一个循环后的时刻。foreach
有趣的是,这并没有引发错误,而是跳过(?)循环数组中的所有内容,只触及最后一个元素。
测试代码:
$test_array = array(
'a' => 'one',
'b' => 'two',
'c' => 'three'
);
foreach ( $test_array as $key => $val );
echo $val;
问题:为什么会发生这种情况?
当你这样做时:
foreach ( $test_array as $key => $val );
这里所有的 foreach 都被执行(通过每个元素)但是当你放 a;
时没有其他指令利用它,而是当它结束所有迭代时,$val
包含最后一个元素的值,你碰巧在你的下一条指令:
echo $val;
分号结束语句,foreach 语句类似于函数——它打开了一个范围。如果您不使用大括号打开多行范围,则范围会运行到下一个分号,因此
foreach ( $test_array as $key => $val );
相当于
foreach ( $test_array as $key => $val ) { }
我相信这回答了你关于它为什么会这样表现的问题。
结束循环,所以这;
相当于
foreach ( $test_array as $key => $val ){ /* do nothing */ }
在循环结束时 $val 具有最后一个键的值,因此它呼应它
这是所有具有类 C 语法的语言的标准“功能”。即,
for (...);
方法
for (...) { }
此外,在您的情况下,foreach
循环结束后,$val
它不会消失,但仍然存在并保存它分配给的最后一个值。
循环运行,执行迭代和条件检查,但没有别的。然后echo
命令执行,此时$val
包含分配给它的最后一个值。它分配的最后一个值是循环中的最后一个值。
你所做的只是循环到所有,但除了最后一个元素之外什么都不做。