mysqli fetch数组上的php if语句

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'],并希望执行类

我有我的PHP代码: 从sql查询之后开始

$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,
);