即使在对键进行排序后,尽管某些元素具有不同的值,array_diff() 也发现两个关联数组之间没有差异

问题描述 投票:0回答:2

我一定要疯了,我有一段代码可以遍历 CSV 文件并遍历数据库中的记录。如果我们的 csv 文件中的记录与数据库中的记录不匹配,那么它将相应地更新数据库。

为了调试,我打印了两个数组的输出。 $dbEntry 是数据库中已有的数据。 $entry 是来自 csv 的数据。

ksort($dbEntry);
ksort($entry);
var_dump($dbEntry);
echo "<br/>";
var_dump($entry);
echo "<br/>";
var_dump(array_diff($entry, $dbEntry));
echo "<br/>";
if ($overwrite == "on" && array_diff($entry,$dbEntry)) {
    //do sql update
{

输出如下:

array(11) { ["brand"]=> string(6) "xxx" ["id"]=> int(19220) ["lmf_comm"]=> int(0) ["lmf_pass"]=> int(0) ["period"]=> string(3) "Mar" ["pma"]=> string(6) "CEDUNA" ["sf_comm"]=> int(0) ["sf_pass"]=> int(34) ["tf_comm"]=> int(0) ["tf_pass"]=> int(0) ["year"]=> string(4) "2012" } 
array(11) { ["brand"]=> string(6) "xxx" ["id"]=> int(19220) ["lmf_comm"]=> string(1) "0" ["lmf_pass"]=> string(1) "0" ["period"]=> string(3) "Mar" ["pma"]=> string(6) "CEDUNA" ["sf_comm"]=> string(1) "0" ["sf_pass"]=> string(1) "0" ["tf_comm"]=> string(1) "0" ["tf_pass"]=> string(1) "0" ["year"]=> string(4) "2012" } 
array(0) { } 

现在我知道它们是不同的类型转换,但这应该不重要(过去不是)。索引“sf_pass”不同 - $dbEntry 中为 34,$entry 中为 0?

我不明白为什么它在 array_diff 上没有给我任何东西,因此没有在我有 mysql 更新查询的地方输入 if 语句。

编辑:

这确实没有意义,因为稍后在 CSV 中我从不同的行获得以下输出。我不明白为什么以下内容会给我我正在寻找的输出,而另一行具有几乎相同的值和类型转换却没有给我我正在寻找的输出

array(11) { ["brand"]=> string(4) "yyy" ["id"]=> int(12) ["lmf_comm"]=> int(0) ["lmf_pass"]=> int(8) ["period"]=> string(3) "Jan" ["pma"]=> string(8) "FIVEDOCK" ["sf_comm"]=> int(5) ["sf_pass"]=> int(4) ["tf_comm"]=> int(14) ["tf_pass"]=> int(28) ["year"]=> string(4) "2012" } 
array(11) { ["brand"]=> string(4) "yyy" ["id"]=> int(12) ["lmf_comm"]=> string(2) "32" ["lmf_pass"]=> string(1) "8" ["period"]=> string(3) "Jan" ["pma"]=> string(8) "FIVEDOCK" ["sf_comm"]=> string(1) "5" ["sf_pass"]=> string(1) "4" ["tf_comm"]=> string(2) "14" ["tf_pass"]=> string(2) "28" ["year"]=> string(4) "2012" } 
array(1) { ["lmf_comm"]=> string(2) "32" } 
php arrays filter associative-array array-difference
2个回答
1
投票

默认情况下,

array_diff
函数仅检查值。并且它不考虑该值重复了多少次。

使用

array_diff_assoc
。它逐个比较数组键。


1
投票

我会用

array_diff_assoc
而不是
array_diff

检查这些代码

http://codepad.org/wddrqG5h

array_diff_assoc
会考虑钥匙

© www.soinside.com 2019 - 2025. All rights reserved.