PHP If语句 - 在While循环中获取一个结果

时间:2015-07-22 02:23:36

标签: php if-statement

我可能会以错误的方式解决这个问题,但我有一个简单的设置,我正在尝试执行以下操作:

<?php
...
if ($variable == "this")
{
    echo "this";
}
elseif ($variable == "that")
{
    echo "that";
}
else
{
   echo "neither";
}
...
?>

在我的情况下,我在while循环中执行if语句,因此$variable在一次迭代中可能等于this,在另一次迭代中可能等于that,因此我得到两者$variable等于thisthat时显示的结果 - 这就是我想要的。到目前为止一切都很好。

但是,如果所有$variable次迭代都没有结果,我只想显示neither一次(只要$variable的所有迭代都不等于{{1}我的while循环中的{}或this。由于我处于while循环中,因此每次that不等于neither$variable时,我会多次获得this次。

所以我的问题是 - 如果that次迭代都不等于neither$variable,我如何才能使this的结果只显示一次?< / p>

编辑:澄清帖子...这里有一个更完整的例子,我的代码(简化了一点,以免占用太多空间):

that

4 个答案:

答案 0 :(得分:1)

我会通过假设没有任何匹配来做到这一点,然后在某些东西匹配时改变它。然后在循环之后如果没有匹配,它仍将被设置为false。见下面的例子。我做了一个函数来快速演示当某些东西匹配时会发生什么,以及当它们都没有匹配时会发生什么。通常,函数不应该回显数据;)

<?php

echo 'checking 0-5'.PHP_EOL;
$check = range(0,5);
check($check);

echo 'checking 10-12'.PHP_EOL;
$check = range(10,12);
check($check);

function check($check){
  $noneMatched = true;
  foreach($check AS $i){
     if($i==2){
        echo 'first'.PHP_EOL;
        $noneMatched = false;
     }elseif($i==4){
        echo 'second'.PHP_EOL;
        $noneMatched = false;
     }
  }

  if($noneMatched === true){
   echo 'none matched'.PHP_EOL;
  }
}

https://eval.in/402729

输出:

checking 0-5
first
second
checking 10-12
none matched

答案 1 :(得分:1)

你的编辑肯定会产生很大的不同。

首先,您是否可以更改用于搜索的SQL查询?如果是,您可以试试这个:

// Perform search only for the valid status, which are 'this' and 'that'
$results = $con->query("SELECT * FROM `order` WHERE status IN ('this', 'that')");

if ($results)
{
    if ($results->num_rows == 0)
    {
        echo 'neither';
    }
    else
    {
        while($obj = $results->fetch_object())
        {
            if ($obj->status == 'this')
            {
                echo 'this';
            }
            elseif ($obj->status == 'that')
            {
                echo 'that';
            }
        }
    }
}

或者,如果无法更改查询,则需要循环两次:一次检查您是否至少有thisthat,然后再打印实际结果。

$has_this_or_that = false;
$results = $con->query("SELECT * FROM `order`"); <-- $con is just a mysqli_connect statement.
if ($results)
{
    while($obj = $results->fetch_object() && ! $has_this_or_that)
    {
        $status = $obj->status;

        if ($status == 'this' || $status == 'that')
        {
            $has_this_or_that = true;
        }
    }

    if ($has_this_or_that)
    {
        // Reference: http://php.net/manual/en/mysqli-result.data-seek.php
        $results->data_seek(0);

        while($obj = $results->fetch_object())
        {
            $status = $obj->status;

            if ($status == 'this')
            {
                echo 'this'; <-- this is actually html code, but let's pretend it's just this.
            }
            elseif ($status == 'that')
            {
                echo 'that';
            }
        }
    }
    else
    {
        echo 'neither';
    }

        else
        {
            echo 'neither';
        }
    }
}

答案 2 :(得分:0)

您可以先检查数组中是否存在'this''that'值。如果他们不这样做,那就不要回应一个单一的&#39;如果其中任何一个存在,只需继续执行while循环。

if(!in_array('this', $your_array) && !in_array('that', $your_array)) {
    echo 'neither';
} else {
    // insert your while loop here
}

编辑:它应该是&&运算符,因为它们都不存在,while循环执行

答案 3 :(得分:0)

如果你发现了这个或那个,那么更新一个变量,如果变量没有更新,那么在循环之外做一些事情。

<?php
$foo = false;
...
if ($variable == "this")
{
    echo "this";
    $foo = true;
}
elseif ($variable == "that")
{
    echo "that";
    $foo = true;
}
...
If (!$foo) {

    echo "none of them are that or this";

}     ?&GT;

如果它们中的任何一个或那个,则循环外部的if语句将不会运行。这意味着如果它们都不是,那么将显示输出。