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!!! ----> '.$colors[$i].'<br>';
else
echo 'Nope, not this one... '.$colors[$i].'<br>';
}
echo "<br>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])循环中的code>在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 )
^^
????