我创建了两个简单的例子:
第一个例子:
<?php $arr = array(1,2,3,4,5); ?>
<?php foreach ($arr as $element) ?>
<?php { ?>
<?php echo $element; ?>
<?php } ?>
Run Code Online (Sandbox Code Playgroud)
输出:
5 //Is this result wrong?
Run Code Online (Sandbox Code Playgroud)
第二个例子:
<?php $arr = array(1,2,3,4,5); ?>
<?php foreach ($arr as $element) { ?>
<?php echo $element; ?>
<?php } ?>
Run Code Online (Sandbox Code Playgroud)
输出:
12345
Run Code Online (Sandbox Code Playgroud)
我错过了什么PHP语法?
我知道有一种替代的foreach语法,但在我看来,两个显示的示例都应该产生相同的输出.(使用PHP版本进行代码测试:5.6.12)
编辑:
我知道每行都不需要标签.更确切地说:我想知道为什么这两个例子给我2个不同的结果?
根据输出,我的猜测是:
<?php $arr = array(1,2,3,4,5); ?>
<?php foreach ($arr as $element) ?>
<?php { ?>
<?php echo $element; ?>
<?php } ?>
Run Code Online (Sandbox Code Playgroud)
被解释为:
<?php
$arr = array(1,2,3,4,5);
foreach ($arr as $element);
{
echo $element;
}
?>
Run Code Online (Sandbox Code Playgroud)
看起来像翻译中的错误?请参阅Rizier123的评论:
- 不是错误:stackoverflow.com/q/29284075/3933332
- foreach之后的括号()/ 这里什么都不做 /; 只是一个声明组:php.net/manual/en/control-structures.intro.php
无论如何,代码看起来很糟糕.请选择更干净的代码.
通过阅读问题的评论,我认为Jon Stirling最好地解释了这个症状:
只是猜测,但第一个例子中的?>实际上可能被视为语句结束(循环可以不使用大括号).此时,循环已经发生,$ element是最后一个值.然后大括号只是作为你回显的代码块,即5.