首先先对这两个函数做一个简单的说明:
简单地说,两者都是将通过比较之后将不同的内容进行输出。
array_diff()函数返回两个数组的差集数组。区别在于不存在任何其他参数数组中的键值;
array array_diff ( array $array1
, array $array2
[, array $...
] )
-
要被对比的数组
-
和这个数组进行比较
-
更多相比较的数组
array1
array2
...
而array_diff_assoc()函数也是返回两个数组的差集数组,该数组包括了所有在被比较的数组中,但是不存在任何其他参数数组中的键和值;
array array_diff_assoc ( array $array1
, array $array2
[, array $...
] )
-
The array to compare from
-
An array to compare against
-
More arrays to compare against
array1
array2
...
下面对这两个函数进行一个简单的输出演示,用截图演示:
array_diff()函数:
输出结果如下:
array_diff_assoc()函数:
输出结果如下:
对于第一个函数理解很容易,但是我们发现第二个函数的输出方式有点难以理解,为什么是输出了下标为0和下标为2?
下面着重说明下第二个函数,通过调试进行一个原理的验证:
我们先做一个假设,当出现三个数组的时候,第一个数组与其他数组进行比较的时候,做了一个判断,即只有之后的数组中相同下标位置上的值都不同的时候才输出第一个数组中的值,修改下第$a3中的dog,结果输出为:
此时输出了下标为1的dog,反向验证下,修改下$a3中的horse:
经过调试之后,我们可以得出一个结论,即array_diff_assoc()函数被调用时,当被比较的数组大于1个的时候,这个时候需要相同下标上的所有值都不同才进行输出。