将array1与一个或多个其他数组进行比较,并返回array1中任何其他数组中不存在的值。
情况似乎并非如此。采取以下示例
$a = array(1,2,3,4);
$b = array(3,4,5);
echo "b FROM a = ";
echo json_encode(array_diff($a,$b));
echo "<br>a FROM b = ";
echo json_encode(array_diff($b,$a));
返回
b FROM a = [1,2]
a FROM b = {"2":5}
即。一个案例中的普通数组和另一个案例中的关联数组。容易修复 - 我只关心价值观,所以我可以简单地做array_values(array_diff
。然而,令我困扰的是文档掩盖了这种差异。也许这里有人可以更多地了解正在发生的事情?
答案 0 :(得分:3)
不是PHP做任何魔术,它是json
array_diff()维护键/关联性
b from a
返回
array(
0 => 1
1 => 2
)
a from b
返回
array(
2 => 5
)
当你转换为json时,如果json的数字从0开始增加并且递增1,json就不会为这些键而烦恼,因此json会忽略来自b from a
的键,因为它们匹配标准
但是,a from b
结果中的键不会自然地从0开始递增,因此它们存储在json中
如果您不想保持关键关联,请使用
echo json_encode(array_values(array_diff($b,$a)));
将键重置为自然递增