我正在使用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)
同样的问题。
答案 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]);
}