【问题标题】:PHP if Statement with ORPHP if 语句与 OR
【发布时间】:2012-09-05 10:39:14
【问题描述】:

在 PHP if 语句中使用 OR|| 似乎有一个神秘的问题。我的代码是这样的:

if ($region=='ibiza' || 'mallorca' || 'menorca' || 'andalucia' || 'basque' || 'cataluna' || 'centralspain' || 'greenspain' || 'pyrenees' || 'rioja' || 'valencia') {
    $GoTo = "/spain/".$region.".php";    
}

无论我给$region 赋予什么值,$GoTo 总是以/spain/$region.php 出现,即第一个 if 循环总是评估为“真”。还有其他方法可以做到这一点,但我不明白为什么这种方法不起作用。

【问题讨论】:

    标签: php if-statement logical-operators


    【解决方案1】:

    @Fluffeh 发布的答案是正确的。编辑:@Findus 的解释也是正确的。

    如果你想偷懒,你可以这样做:

    if(in_array($region,array('ibiza','mallorca','menorca','...','..'))){}
    

    【讨论】:

    • 是的,正是我在初次发帖后所写的内容 :)
    • @MattHumphrey 是的,但老实说,我这样做的主要原因是:因为我很懒
    • 我是一个自以为是的程序员,但这些问题总是让我想知道你是否阅读过关于这个主题的教程/博客/项目/东西,在这种情况下是 if 语句......因为这些东西在谷歌上很容易找到。
    • 我会选择这个而不是 Fluffeh 的解决方案,只是因为当我稍后回到它时,它似乎更容易理解。感谢大家的帮助:8 分钟内有 5 个答案。难以置信!
    • 是的,user338128,在来这里之前我已经做了很多搜索。我没有看到任何说我使用 || 的快捷方式。行不通,我以为我在其他地方看到过它被使用。事后看来,显然不是。
    【解决方案2】:

    你想使用这样的 or 语句:

    if ($region=='ibiza'||$region=='mallorca'||$region=='menorca'....)
    

    但在你的情况下,你可能想使用in_array()

    $locals=array(ibiza','mallorca','menorca','andalucia','basque','cataluna','centralspain','greenspain','pyrenees','rioja','valencia')
    if (in_array($region, $locals)) {
        $goto="something...";
    }
    

    【讨论】:

      【解决方案3】:

      这是因为语句“mallorca”(以及后面的语句)的计算结果为真。 您应该使用比较,例如 $region == "mallorca",并且对所有其他类似。

      【讨论】:

        【解决方案4】:

        你可以像这样简化你的代码:

        <?php
            $selectedRegions1 = array('ibiza','mallorca','menorca','andalucia','basque','cataluna', 'centralspain','greenspain','pyrenees','rioja','valencia');
            $selectedRegions2 = array('brittany','burgundy','alps','aquitaine','loire','languedoc', 'paris','provence');
            $selectedRegions3 = array('grancanaria','lapalma','lanzarote','tenerife');
            $selectedRegions4 = array('atlas','essaouira','fez','marrakech');
            if (in_array($region, $selectedRegions1 )) {
               $GoTo = "/spain/".$region.".php";
            }elseif(in_array($region,$selectedRegions2)) {
                $GoTo = "/france/".$region.".php";
            }elseif (in_array($region,$selectedRegions3)) {
                $GoTo = "/canaries/".$region.".php";
            }elseif (in_array($region,$selectedRegions4)) {
            $GoTo = "/morocco/".$region.".php";
            }
        ?>
        

        您的代码的问题是您在“||”之后忘记了“$region ==”:

        if ($region=='ibiza'|| $region=='mallorca'|| $region=='menorca'|| $region=='andalucia'|| $region=='basque'|| $region=='cataluna'|| $region=='centralspain'|| $region=='greenspain'|| $region=='pyrenees'|| $region=='rioja'|| $region=='valencia')
        

        【讨论】:

        • 我没有忘记 '$region==';我只是觉得我不需要它。无论如何,代码现在已经修改,页面已经启动并且可以正常工作了,再次感谢所有不厌其烦的回复。
        【解决方案5】:

        你有这样的 if 语句

        if ($region=='ibiza'|| $region=='mallorca'|| $region=='menorca'|| $region=='andalucia'|| $region=='basque'|| $region=='cataluna'|| $region=='centralspain'|| $region=='greenspain'|| $region=='pyrenees'|| $region=='rioja'||$region=='valencia') {
        $GoTo = "/spain/".$region.".php";
        }
        

        【讨论】:

        • 感谢哈利(和 Findus)。我以为我可以通过我的方法减少 if 语句的长度,但显然不行!至少我现在已经确认我不能那样做。
        猜你喜欢
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 2012-12-15
        • 1970-01-01
        • 2021-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多