带大括号的循环导致输出错误

时间:2015-08-27 12:03:22

标签: php loops foreach

我创建了两个简单的例子:

第一个例子:

<?php $arr = array(1,2,3,4,5); ?>

<?php foreach ($arr as $element) ?>
<?php { ?>
    <?php echo $element; ?>
<?php } ?>

输出:

5 //Is this result wrong?

第二个例子:

<?php $arr = array(1,2,3,4,5); ?>

<?php foreach ($arr as $element) { ?>
    <?php echo $element; ?>
<?php } ?>

输出:

12345

我对PHP语法有什么看法?

我知道有一种替代的foreach语法,但在我看来,两个显示的示例都应该产生相同的输出。 (使用PHP版本进行代码测试:5.6.12)

修改

我知道每行都不需要标签。 更确切地说:我想知道为什么这两个例子给我2个不同的结果?

4 个答案:

答案 0 :(得分:5)

根据输出,我的猜测是:

<?php $arr = array(1,2,3,4,5); ?>

<?php foreach ($arr as $element) ?>
<?php { ?>
    <?php echo $element; ?>
<?php } ?>

被解释为:

<?php
$arr = array(1,2,3,4,5);

foreach ($arr as $element);
{
    echo $element;
}
?>

看起来像解释器中的错误?查看Rizier123的评论:

  
      
  1. 不是错误:stackoverflow.com/q/29284075/3933332
  2.   
  3. foreach()/ 之后的括号 /;只是一个声明组:php.net/manual/en/control-structures.intro.php
  4.   

无论如何,代码看起来很糟糕。请选择更干净的代码。

阅读问题下的评论我认为Jon Stirling最能解释这个症状:

  

猜猜,但也许是?&gt;在第一个例子中实际上被视为语句结束(循环可以不使用大括号)。此时,循环已经发生,$ element是最后一个值。然后大括号只是作为你回显的代码块,即5。

答案 1 :(得分:0)

您不需要仅使用<?php?>每一行:

<?php
$arr = array(1,2,3,4,5);

foreach ($arr as $element) {
echo $element;
}
?>

或替代语法:

<?php
$arr = array(1,2,3,4,5);

foreach ($arr as $element)
{
echo $element;
}
?>

或者

<?php
$arr = array(1,2,3,4,5);

foreach ($arr as $element):
echo $element;
endforeach;
?>

当你这样做时:

<?php foreach ($arr as $element) ?>
<?php { ?>
    <?php echo $element; ?>
<?php } ?>

PHP没有循环,因为它看到了

foreach ($arr as $element)
{
}
echo $element;

答案 2 :(得分:0)

过度使用<? php>是你的问题。

在输出结果之前,您正在完成foreach上下文,而在第二个中没有这样做。

仔细查看您的示例,您应该看到您的行为有何不同。

答案 3 :(得分:0)

我不知道你为什么使用这么多的php标签,但这就是为什么它不起作用! 试试这个:

<?php $arr = array(1,2,3,4,5);

foreach ($arr as $element)
{
    echo $element;
} ?>