我试图弄清楚为什么我只能从循环访问最后一个结果。我在这里看了很多帖子,我只能找到 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';