如何在if语句中访问Php循环的所有结果

如何在if语句中访问Php循环的所有结果,php,loops,if-statement,Php,Loops,If Statement,我试图弄明白为什么我只能访问循环的最后一个结果。我在这里看过很多帖子,我只能找到OPs询问如何创建循环的地方 如果我有一个名为shirts的表和一个名为colors的列 在“颜色”列中,实体为: red blue green 在我的php页面中: $user = new User(); $userid = $user->data()->id; $choices = array(); if ($colorResults = $db->query("SELECT * F

我试图弄明白为什么我只能访问循环的最后一个结果。我在这里看过很多帖子,我只能找到OPs询问如何创建循环的地方

如果我有一个名为shirts的表和一个名为colors的列 在“颜色”列中,实体为:

red
blue
green
在我的php页面中:

$user = new User();
$userid = $user->data()->id;

 $choices = array();
   if ($colorResults = $db->query("SELECT * FROM shirts WHERE sellerId = $userid")){
     if($colorResults->num_rows){
           while($row = $colorResults->fetch_object()){
                $choices[] = $row;
           }
           $colorResults->free();
      }
 }

foreach($choices as $choice){
   if($choice->color == 'red'){
       echo 'Yes color is red'
   } else {
      echo 'No color';
      }
}
当我显示结果时

Results:
red
blue 
green
问题就在这里

if($choice->color == 'green'){
  echo 'Yes color is green'
} else {
   echo 'No color';
}
这将成功输出

Yes color is green
但如果我将代码更改为:

if($choice->color == 'red'){
   echo 'Yes color is red'
} else {
   echo 'No color';
}
此结果输出将返回

No color
如果其中一种颜色是红色,为什么If语句只能看到最后的结果
首先,我认为最初混淆的一部分是,
$choices
是一个对象数组,而不是对象本身,因此使用
if($choices->color=='red')
将得到一个

注意:尝试获取非对象的属性

根据您的错误报告设置,您可能看不到。但是无论如何,如果你使用
if($choices->color=='anything')
你总是会得到'No color'。所以我假设如果它与绿色匹配,那么你必须实际使用
if($choice->color=='green/red/anything')
,而另一件事就是打字错误

列出所有选择的所有颜色的部分很好(或者至少,最初在后续编辑之前添加时很好)


变量转储($choices->color);看看它的输出,我是不是遗漏了什么?我看不出您在哪里设置了
$choices->color
我在这里使用@esqew。这似乎不是您的全部代码,
$choices
应该是一个数组。介意发布整个内容吗?抱歉,忘了添加foreach循环。。我加了它。。。真的-2次否决票已经只有2分钟了,
if($choices->color=='green'){
if($choices->color=='red')在哪里{
关于循环?经过9次论坛,12种不同的方式重新编排问题,18次否决票,7天的尝试,stackoverflow暂停警报,你和你的患者才明白。是的,这就是我试图实现的目标,我实现了我需要的目标,效果非常好。我真的感谢你。谢谢你休息oring我对stackoverflow的看法。现在我想真正理解它。我理解代码的其余部分,但为什么要先将“包含的颜色”设置为false?我很高兴能提供帮助。这并不完全是必需的,但按照我的编写方式,如果在循环期间找不到您要查找的颜色,
$color\u include
将永远不会被设置,并且当您在循环后尝试使用它,你会得到一个
注意:未定义的变量:
。将其初始化为false可以避免这种情况。啊,好的!太好了!再次感谢你的耐心和理解。令人惊讶的是,有多少人会拒绝发言和投票,而不是回答。需要像你一样的更多信息吗
foreach ($choices as $choice) {
   echo $choice->color . '<br>';
}
$color_included = false; // The color you're looking for has not yet been found

foreach($choices as $choice) {
    echo $choice->color . '<br>'; // List all the colors from your query
    // Check if they are the one you are looking for
    if ($choice->color == 'red') $color_included = true;
}
// Print the result
echo ($color_included) ? 'Yes color is red' : 'No color';