gpt4 book ai didi

php - in_array 找不到元素

转载 作者:行者123 更新时间:2023-11-29 00:15:23 28 4
gpt4 key购买 nike

我正在使用 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]);
}

输出是:

'ah-my-goddess' is already in the list. Excluding.

New 'ahiru-no-oujisama'!

'ahiru-no-sora' is already in the list. Excluding.

为什么说“ahiru-no-oujisama”是新名字?我们从DUMP函数可以看出数组中包含这个元素。

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

郑重声明 - 我在 $snames 数组中有大约 2500 个实体,对于 95% 的记录 (+-),我得到了“已经存在”的结果。然而,对于一些人来说,我变得"new"了。

这可能是某种编码问题?对于表,我有 DEFAULT CHARSET=latin1。这会是个问题吗?

编辑

建议我加一个trim操作:

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

但是我遇到了同样的问题。

最佳答案

显然,问题出在线路上:

unset($snames[$sname]);

对于某些条目,我使用了诸如“70”和“111”之类的名称

作为结果命令:

unset($snames[$sname]);

删除那个位置的元素。不是具有此类键的元素! IE。程序就是这样理解它的:

unset($snames[77]);

这就是我所期待的:

unset($snames['77']);

所以该行必须更改为以下内容:

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

关于php - in_array 找不到元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23162110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com