我一定是疯了,我有一段代码,它遍历一个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" }