PHP:对FOR循环和2个括号感到困惑

时间:2014-05-10 21:25:18

标签: php loops for-loop

只是关于以下循环的问题和最后的括号(我刚开始学习PHP所以它可能是一个菜鸟问题)。 我写了下面的代码,它没有用:

        <?php 
        function maximum(){
        $wieviele = func_num_args();
        $arg = func_get_args();
        $first = $arg[0];

        for ($i = 1;$i < $wieviele;$i++){
        if ($first < $arg[$i])
        $first = $arg[$i];

        return $first;
        }


        }

        echo maximum(1,4,64,9);
        ?>

现在我在阅读的书中检查了它,解决方案是以下代码,除了最后的括号外几乎相同。

        <?php 
        function maximum(){
        $wieviele = func_num_args();
        $arg = func_get_args();
        $first = $arg[0];

        for ($i = 1;$i < $wieviele;$i++)
        if ($first < $arg[$i])
        $first = $arg[$i];

        return $first;



        }

        echo maximum(1,4,64,9);
        ?>

现在我很想知道为什么它只能在没有FOR-loop的括号的情况下工作。

谢谢

3 个答案:

答案 0 :(得分:3)

如果你有一个控制结构,比如for循环或if语句,并且你后面没有包含一组括号,那么只有下一行被认为是在控制结构中。

所以当你有

    for ($i = 1;$i < $wieviele;$i++)
    if ($first < $arg[$i])
    $first = $arg[$i];

    return $first;

这意味着

    for ($i = 1;$i < $wieviele;$i++){
        if ($first < $arg[$i]){
            $first = $arg[$i];
        }
    }
    return $first;

也就是说,它在适当时将$first设置为$arg[$i],并在循环结束后返回。

在您的代码中,您有

    for ($i = 1;$i < $wieviele;$i++){
    if ($first < $arg[$i])
    $first = $arg[$i];

    return $first;
    }

相当于

    for ($i = 1;$i < $wieviele;$i++){
        if ($first < $arg[$i]){
            $first = $arg[$i];
        }
        return $first;
    }

因此,您将进入循环的第一次迭代,检查条件,然后返回$first。也就是说,在第一次迭代后返回,而不是在循环完成时返回。

关于省略/包括括号的建议,应始终尽可能明确,以使代码的目的和效果尽可能直观。

答案 1 :(得分:2)

您需要在第一个代码块return $first;循环之外添加for才能使其正常运行。

Demonstration

第一个代码无效,因为您提前返回值


为什么不让它变得更简单?

使用max()代替......

$array = array(1,4,64,9); //<--- Add elements to your array
echo max($array); // 64

答案 2 :(得分:0)

建议甚至对loops.if-statements的一行主体使用括号。

与此代码的括号相同

for ($i = 1;$i < $wieviele;$i++)
if ($first < $arg[$i])
$first = $arg[$i];

for ($i = 1;$i < $wieviele;$i++)
{
    if ($first < $arg[$i])
    {
        $first = $arg[$i];
    }
}