【问题标题】:PHP if or statement not working as expectedPHP if 或语句未按预期工作
【发布时间】:2015-08-18 17:49:39
【问题描述】:

我正在尝试循环访问我的 $_POST 变量并显示只有 key = lap* 的数据。这是我目前的代码。

foreach($_POST as $key=>$val)
{
    if($key != "time" || $key != "avgspd" || $key != "kartno")
    {
        echo $key . "<br>";
    }
}

它给我的结果是这样的

time
lap1
lap2
lap3
lap4
lap5
lap6
lap7
lap8
lap9
lap10
lap11
lap12
lap13
lap14
lap15
lap16
lap17
avgspd
kartno

如您所见,它仍然显示键 avgspdkartnotime。奇怪和令人困惑的是,如果我将代码更改为:

foreach($_POST as $key=>$val)
{
    if($key == "time" || $key == "avgspd" || $key == "kartno")
    {
        echo $key . "<br>";
    }
}

结果如下:

time
avgspd
kartno

这没有任何意义。如果我检查键是否不等于timeavgspdkartno 它会显示所有键,但是当我说它只显示键“时间”、“avgspd”或“kartno”时,它的工作原理是预期的!这里发生了什么?我需要做什么来修复它。是一些较早的代码导致错误吗?如果是这样,这是我的代码。

Index.php

<?php
    if(!$_POST)
    {
        include("functions.php");
        echo "<link rel='stylesheet' type='text/css' href='style.css'>";
        echo "<form action='' method='POST'>";
        echo "<table><tr>";
        table_head("Time","lap 1","lap 2","lap 3","lap 4","lap 5","lap 6","lap 7","lap 8","lap 9","lap 10","lap 11","lap 12","lap 13","lap 14","lap 15","lap 16","lap 17","Avg Spd");
        echo "</tr><tr>";
        display_fields();
        echo "</tr></table>";
        echo "Kart Number: <input type='text' size='2' name='kartno'/><br>";
        echo "<input type='submit'/>";
        echo "</form>";
    } else {
        foreach($_POST as $key=>$val)
        {
            if($key == "time" || $key == "avgspd" || $key == "kartno")
            {
                echo $key . "<br>";
            }
        }
    }
?>

functions.php

<?php
    function table_head()
    {
        if ( func_num_args() > 0 )
        {
            $args = func_get_args();
            foreach($args as $value)
            {
                echo "<th>" . $value . "</th>";
            }
        }
    }


    function display_fields()
    {
        $i = 0;
        $a = 19;
        $name="hi";
        while($i++ < $a)
        {
            array_push($numbers,$i);
            if($i==1)
            {
                $name = "time";
            } else if($i > 1 && $i < 19){
                $name = "lap" . strval($i-1);
            } else {
                $name = "avgspd";
            }
            echo "<td><input type='text' size='8' name='" . $name . "'/></td>";
        }
    }
?>

【问题讨论】:

  • 问题是您的预期输出是什么? (顺便说一句:漂亮的头像 :) 第一个 if 语句是:如果值不等于:time, avgspd and kartno 同时它会进入它。 (因此,您可能会看到一个等于 3 个不同值的值是不可能的) 第二个 if 语句:如果它等于 3 个值之一,请输入 if 语句。我猜你可能想要做的是说:如果它不是 3 个值之一,即:$key != "val1" &amp;&amp; $key != "val2" ...
  • @Rizier123 我希望它显示以“lap”开头的键。问题里说了! :p。一直住在航站楼。谁需要图形用户界面!大声笑 为什么 MS-DOS 的时代消失了?哈哈。假设 Arch Linux 更好! :)

标签: php if-statement logical-operators


【解决方案1】:

我相信您正在寻找&amp;&amp;。否则我错过了什么。

foreach($_POST as $key=>$val)
{
    if($key != "time" && $key != "avgspd" && $key != "kartno")
    {
        echo $key . "<br>";
    }
}

您希望满足所有三个条件才能打印。

编辑: 更好!检查它是否以lap 开头。这更适合你想要的。

foreach($_POST as $key=>$val)
{
    if(substr($key, 0, 3) == "lap")
    {
        echo $key . "<br>";
    }
}

【讨论】:

  • 哇,我被打败了。
  • 酷。谢谢你,如果从一圈开始!这就是我想做的,但不确定是否可以。
【解决方案2】:

这总是正确的:

if($key != "time" || $key != "avgspd" || $key != "kartno")

你的意思是:

if($key != "time" and $key != "avgspd" and $key != "kartno")

你可以改写成:

if(! in_array($key,array("time","avgspd","kartno")))

【讨论】:

    【解决方案3】:

    给你:

    foreach($_POST as $key=>$val)
    {
        if($key != "time" && $key != "avgspd" && $key != "kartno")
        {
            echo $key . "<br>";
        }
    }
    

    说明:如果您将 OR 语句放在这里,它将始终打印,因为您基本上告诉您的程序在它与“时间”不同或与“avgspd”不同时打印它。并且“时间”与“avgspd”不同,所以它会打印出来。

    【讨论】:

      猜你喜欢
      • 2020-03-11
      • 1970-01-01
      • 2020-11-28
      • 2016-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      相关资源
      最近更新 更多