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


How to access all results from Php loop in an if statement

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

如果我有一个名为衬衫的表和一个名为颜色的列在颜色列中,条目为:

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 语句只能看到最后一个结果以及如何访问所有结果以使 if 语句为真。

首先,我认为最初的部分混淆是$choices是一个对象数组,而不是对象本身,所以使用 if ($choices->color == 'red') 会让你得到一个

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

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

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

foreach ($choices as $choice) {
   echo $choice->color . '<br>';
}

根据您看到的结果,听起来正在发生的事情是您在 foreach 循环后检查 $choice->color 的值。 $choice将在 foreach 循环后保持设置,但它将始终是循环中的最后一个值。现在,我不确定您在这里要做什么,但看起来您想列出查询返回的所有颜色,然后检查是否包含特定的颜色。你可以这样做:

$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';