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