in_array找不到元素

时间:2014-04-18 20:49:47

标签: php mysql arrays

我正在使用PDO方法从数据库中获取数组:

$statement = $db->prepare("SELECT sname FROM list WHERE ongoing = 1;");
$statement->execute();
$snames = $statement->fetchAll(PDO::FETCH_COLUMN, 0);
var_dump($snames);

转储输出为(总计2500个结果):

  

[69] => string(13)" ah-my-goddess"

     

[70] => string(17)" ahiru-no-oujisama"

     

[71] => string(13)" ahiru-no-sora"

然后我检查数组$snames是否包含新元素$sname

$sname = current(explode(".", $href_word_array[count($href_word_array)-1]));
if (in_array($sname, $snames) == False)
{
    echo "New '$sname'!<br>";
}
else
{
    echo "$sname is already in the list. Excluding.<br>";
    unset($snames[$sname]);
}

输出是:

  

&#39; AH-MY-女神&#39;已经在列表中。不包括

     

新&#39; ahiru-no-oujisama&#39;!

     

&#39; ahiru-NO-索拉&#39;已经在列表中。不包括

为什么会说&#39; ahiru-no-oujisama&#39;是新名字?我们可以从DUMP函数中看到数组包含这个元素。

我将结果进行了一千次比较。记事本找到两个名称。没有空间。数据库中的名称与变量中的名称相同。

为了记录 - 我在$snames阵列中有大约2500个实体,在95%的记录中有 (+ - )我得到了&#34; 已经存在< /强>&#34;结果。但是,对于一些我正在获得&#34; &#34;。

这可能是某种编码问题吗?对于表格,我有DEFAULT CHARSET = latin1。这可能是个问题吗?请帮助确定问题。

按建议编辑 - 添加修剪操作:

$snames = $statement->fetchAll(PDO::FETCH_COLUMN, 0);
for ($i=0; $i < Count($snames); $i+=1)
{
    $snames[$i] = trim($snames[$i]);
}

if (in_array(trim($sname), $snames) == False)

同样的问题。

1 个答案:

答案 0 :(得分:1)

显然,问题在于行:

unset($snames[$sname]);

对于某些条目,我有“70”和“111”

等名称

作为结果命令:

unset($snames[$sname]);

删除该位置的元素。没有带钥匙的元素!!即这就是程序如何理解它:

unset($snames[77]);

这就是我所期待的:

unset($snames['77']);

因此必须将该行更改为以下内容:

if(($key = array_search($sname, $snames)) !== false)
{
    unset($snames[$key]);
}