mysqli fetch数组上的php if语句
我有我的PHP代码: 从sql查询之后开始mysqli fetch数组上的php if语句,php,Php,我有我的PHP代码: 从sql查询之后开始 $pieData = array(); } while($row = mysqli_fetch_array($result)) { $pieData[] = array('value' =>(int)$row['cnt'], 'color' => '#222222'); 现在,当我通过json\u encode()时,这就成功了。我想动态地改变颜色 从我的数据库$result中,我访问$row['Delaytype'],并希望执行类
$pieData = array();
}
while($row = mysqli_fetch_array($result))
{
$pieData[] = array('value' =>(int)$row['cnt'], 'color' => '#222222');
现在,当我通过json\u encode()
时,这就成功了。我想动态地改变颜色
从我的数据库$result中,我访问$row['Delaytype']
,并希望执行类似操作
while($row = mysqli_fetch_array($result)){
if($row['Delaytype'] === "engineering"){
$pieData[] = array('value' =>(int)$row['cnt'], 'color' => '#222222');
}elseif($row['Delaytype'] === "something else"){
$pieData[] = array('value' =>(int)$row['cnt'], 'color' => '#888888');
}
代码可以工作,但它接受第一个true语句并继续执行,所有颜色都具有相同的值,生成的饼图也是如此。我尝试了switch语句,if并尝试在数组中循环,但我对这方面的理解是有限的
非常感谢您的帮助
该表称为延迟:
It is like
Delaytype | Delayhours
engineering | 3
engineering | 2
human error | 4
SQL查询:
"SELECT Delaytype, SUM('Delayhours') as cnt FROM delays GROUP BY
Delaytype;"
If I echo a table with
<tr><td>$row[delaytype]</td><td>$row[cnt]</td></tr> //forgive formatting
STRCAECMP也不工作
如果我这样做,如果(1=1)它工作,那么这与比较有关,但它是正确的,输出是小写工程,但它在测试时没有看到它
我现在有这个工作。奇怪的是,我所做的只是将“人为错误”改为“人为错误”,将“工程”改为“工程”。我查看了我的html输入值,没有发现前导空格?不知道为什么它和空间一起工作。我要在我的代码中搜索原因。谢谢你的帮助和其他建议。STRCAECMP与无STRCAECMP一样工作。我认为你所说的一切都是正确的…+它将出现遮阳棚,并且更可能会因类似问题而被查看。感谢您的帮助请使用
=
而不是==
使用您的比较条件,因为后者比较匹配数据类型,所以请尝试这种方式,并查看此处以了解更多信息
其他方式:
while($row = mysqli_fetch_array($result))
{
if(strcasecmp($row['Delaytype'],"engineering")==0){
$pieData[] = array('value' =>(int)$row['cnt'], 'color' =>
'#222222');
}elseif(strcasecmp($row['Delaytype'],"human error")==0){
$pieData[] = array('value' =>(int)$row['cnt'], 'color' =>
'#888888');
}
注意:此函数返回的字段名区分大小写。循环的更健壮版本是:
if ($row['Delaytype'] === 'engineering') {
$color = '#222222';
} elseif ($row['Delaytype'] === 'human error') {
$color = '#888888';
} else {
$color = '#ffffff';
}
$pieData[] = array(
'value' => (int)$row['cnt'],
'color' => $color,
);
这将检查样本中的每个值,但也有一个回退值,以防两者不匹配。它将
$pieData
赋值移到该循环之外,这样您就不会在那里复制代码。您的代码应该可以工作。请提供“Delaytype”列的一些示例,以便我们可以重现该问题。如果您只有两种延迟类型是工程
和人为错误
,那么您在elseif
分支中与其他内容进行比较
没有任何意义–这将导致$pieData
仅填充工程
的记录,而人为错误
的记录根本不会添加到数组中,因为if
和elseif
条件都不匹配…存在两个以上的条件。代码被缩短用于演示。感谢您的评论,注意mysqli驱动程序总是返回字符串,因此匹配类型在这里不是问题。即使使用正确的赋值运算符和正确的case,它仍然会失败,并且我得到的else代码我的json看起来像[{“value”:21,“color”:else“},{“value”:“99”,“color”:“else value”}]-示例中没有else值。投入测试。
while($row = mysqli_fetch_array($result))
{
if(strcasecmp($row['Delaytype'],"engineering")==0){
$pieData[] = array('value' =>(int)$row['cnt'], 'color' =>
'#222222');
}elseif(strcasecmp($row['Delaytype'],"human error")==0){
$pieData[] = array('value' =>(int)$row['cnt'], 'color' =>
'#888888');
}
if ($row['Delaytype'] === 'engineering') {
$color = '#222222';
} elseif ($row['Delaytype'] === 'human error') {
$color = '#888888';
} else {
$color = '#ffffff';
}
$pieData[] = array(
'value' => (int)$row['cnt'],
'color' => $color,
);