PHP简单数组的空值

PHP简单数组的空值,php,arrays,for-loop,null,Php,Arrays,For Loop,Null,我有一个十六进制颜色代码数组,希望循环遍历它们并与数据库条目进行比较。代码如下: // database connect & query hidden for brevity $row = mysql_fetch_assoc($result); $colors = array("EEEEEE","EEEED8","EEEEAA","EEEE9A","EEEE77","EEEE49","EEEE21","EEEE00", "DAFFFF","DAFF

我有一个十六进制颜色代码数组,希望循环遍历它们并与数据库条目进行比较。代码如下:

// database connect & query hidden for brevity

$row = mysql_fetch_assoc($result);

$colors =  array("EEEEEE","EEEED8","EEEEAA","EEEE9A","EEEE77","EEEE49","EEEE21","EEEE00",
                 "DAFFFF","DAFFF3","DAFFDA","DAFFD2","DAFFBF","DAFFA6","DAFF91","DAFF7F",
                 "9FFFFF","9FFFED","9FFFC8","9FFFBB","9FFF9F","9FFF7A","9FFF5A","9FFF3F",
                 "19FFFF","19FFEA","19FFBD","19FFAE","19FF8C","19FF60","19FF39","19FF19",
                 "BBC8FF","9FC8FF","7AC8FF","5AC8FF","3FC8FF","7A7AFF","5A7AFF","3F7AFF",
                 "BB7AFF","9F7AFF","608CFF","398CFF","198CFF","6039FF","3939FF","1939FF",
                 "EEAAAA","EEAAEE","EEAAD8","FF91D2","C87AFF","8C39FF","BD39FF","AE39FF",
                 "EEAA77","EEAA49","EEAA21","EEAA00","FF5A3F","FF6039","FF6019","FF3919",
                 "FF5A9F","FF5A7A","FF5A5A","FF6060","FF3960","FF3F5A","FF3F3F","FF3939");


if(!in_array($row['color1'],$colors))
{
    $colors[] = $row['color1'];
}
if(!in_array($row['color2'],$colors))
{
    $colors[] = $row['color2'];
}

$count = count($colors);

echo "The Database says Color1 is: ".$row['color1']."<br>";
echo "The Colors Array says it is: ".$colors[73]."<br><br>";
echo "The Database says Color2 is: ".$row['color2']."<br>";
echo "The Colors Array says it is: ".$colors[74]."<br><br><br>";

echo "Going Through the Loops shows:<br><br>";

for($i=0;$i<$count;$i++)
{
    if(('#'.$colors[$i]) == $row['color1'])
        echo 'FOUND IT!!! ----&gt; '.$colors[$i].'<br>';
    else
        echo 'Nope, not this one... '.$colors[$i].'<br>';
}

echo "&lt;br&gt;And Printing the Array we see:<br><br><br>";
print_r($colors);
我以前从未遇到过简单数组的问题。。。我没有看到什么?我有一种可怕的感觉,这是一个愚蠢的零宽度空间或类似的东西,但我找不到它

谢谢你的帮助。

应该是:

..$i<sizeof($count)
。$i此代码:

if(!in_array($row['color1'],$colors))
{
    $colors[] = $row['color1'];
}
if(!in_array($row['color2'],$colors))
{
    $colors[] = $row['color2'];
}
如果
$row['color1']
$row['color2']
为空,则将在颜色数组中插入一个空条目。将检查修改为类似这样的内容,这样应该可以去掉空值

if( !empty( $row['color1']) && !in_array($row['color1'],$colors))
{
    $colors[] = $row['color1'];
}
if( !empty( $row['color2']) &&  !in_array($row['color2'],$colors))
{
    $colors[] = $row['color2'];
}
编辑:这里有一种复制循环输出的方法

  • 你的索引混淆了,74不存在
  • $row['color1']
    为空,
    $row['color2']
    51A800
  • 您可能已关闭警告/错误报告
  • 请参见下面的演示,它完全复制了循环的输出

    编辑:找到空白条目 我错误地认为条目是空的-它实际上在数组中不存在。查看上面的阵列输出:

    [71] => FF3939 [73] => 51A800 [74] => 8FC400 )
                  ^^
                 ????
    
    如果根据
    count($array)
    循环,将得到
    73
    ,这是正确的元素数。您从
    0-73
    循环,而
    72
    不存在。你永远不会得到
    74
    ,因为数组中只有
    73
    元素,所以你永远不会得到索引
    74
    。找出索引
    72
    丢失/消失的原因,您将解决整个问题。也许真正的问题在于没有粘贴到上面的代码

    运行此命令时,如果在线路的某个地方,
    72
    被擦除,则会复制输出(如果关闭了错误报告,则会)


    最后,如果将某个条目插入到数组中,然后在将
    $row
    颜色插入到
    $colors
    数组中之前将其删除,则会精确地复制输出。我的最佳猜测是,这就是OP省略代码的某些部分所发生的情况。

    我不确定,但“”之间的内容是由php解释的,因此其中一种颜色可能被解释为十六进制值、地址或其他任何内容。尝试将数组中的“”替换为“”。此外,您还可以执行
    var_dump($colors[$i])在if语句中,在
    $colors
    前面加上“#”前缀,就我所见,
    $row
    中没有“#”。这可能是问题,也可能不是问题,这取决于它与生产代码的对应程度。为了回答这个问题,在打印“不,不是这个”时,我还建议打印
    $I
    的值来识别这些值。这是什么版本的PHP?数组中完全没有索引72,所以我觉得这像是PHP中的一个bug(语法正确)。在旁注中有
    if((“#”。$colors[$i])==$row['color1'])
    ,但是$row和$colors似乎都有保存格式,没有“#”,因此您可以从“if”
    if($colors[$i]==$row['color1'])中删除它
    我没有看到阵列中添加了更多颜色的部分,很好的定位!谢谢你指出我条件句中的那个缺陷。但是,我试过了,仍然有同样的问题。@mason81-我发布了一个演示,完全复制了你的输出(循环),这可能是你的代码出了问题。但是他在循环之前打印了
    $row['color1']
    和$row['color2']`<代码>$row['color1']
    不是空的。@nickb-您的代码没有完全复制OP的示例所做的操作。如果再往下看(在var_dump中),
    $row['color1']
    $row['color2']
    实际上被定义为
    51A800
    8FC400
    ,数组索引中只有一个间隙。
    [71] => FF3939 [73] => 51A800 [74] => 8FC400 )
                  ^^
                 ????