我可能会以错误的方式解决这个问题,但我有一个简单的设置,我正在尝试执行以下操作:
<?php
...
if ($variable == "this")
{
echo "this";
}
elseif ($variable == "that")
{
echo "that";
}
else
{
echo "neither";
}
...
?>
在我的情况下,我在while循环中执行if语句,因此$variable
在一次迭代中可能等于this
,在另一次迭代中可能等于that
,因此我得到两者$variable
等于this
或that
时显示的结果 - 这就是我想要的。到目前为止一切都很好。
但是,如果所有$variable
次迭代都没有结果,我只想显示neither
一次(只要$variable
的所有迭代都不等于{{1}我的while循环中的{}或this
。由于我处于while循环中,因此每次that
不等于neither
或$variable
时,我会多次获得this
次。
所以我的问题是 - 如果that
次迭代都不等于neither
或$variable
,我如何才能使this
的结果只显示一次?< / p>
编辑:澄清帖子...这里有一个更完整的例子,我的代码(简化了一点,以免占用太多空间):
that
答案 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;
}
}
输出:
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';
}
}
}
}
或者,如果无法更改查询,则需要循环两次:一次检查您是否至少有this
或that
,然后再打印实际结果。
$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语句将不会运行。这意味着如果它们都不是,那么将显示输出。