📅  最后修改于: 2023-12-03 15:11:01.359000             🧑  作者: Mango
在开发中,经常需要比较两个数组的差异,并找出差异部分。PHP提供了多种方式来实现该需求:
array_diff()
函数将返回第一个数组中不在其他数组中出现的值。以下是该函数的语法:
array_diff(array1, array2, array3, ...)
其中,array1
为要比较的主数组,后面的array2
,array3
等为要和主数组进行比较的其他数组。该函数将返回不在其他数组中出现的值构成的数组。
$array1 = array('a', 'b', 'c', 'd');
$array2 = array('b', 'd', 'f');
$diff = array_diff($array1, $array2);
print_r($diff);
```
输出:
```
Array
(
[0] => a
[2] => c
)
```
## array_diff_assoc()函数
与`array_diff()`函数不同,`array_diff_assoc()`函数将返回在主数组中,但不在其他数组中以及键值不同的元素。
```
array_diff_assoc(array1, array2, array3, ...)
```
其中,`array1`为主数组,后面的为要比较的其他数组。
```php
$array1 = array('a' => 'green', 'b' => 'brown', 'c' => 'blue', 'red');
$array2 = array('a' => 'green', 'yellow', 'red');
$diff = array_diff_assoc($array1, $array2);
print_r($diff);
```
输出:
```
Array
(
[b] => brown
[c] => blue
[0] => red
)
```
## array_diff_key()函数
`array_diff_key()`函数将比较主数组和其他数组的键名,并返回主数组中存在而其他数组中不存在的键名。
```
array_diff_key(array1, array2, array3, ...)
```
```php
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5);
$diff = array_diff_key($array1, $array2);
print_r($diff);
```
输出:
```
Array
(
[blue] => 1
[red] => 2
[purple] => 4
)
```
## array_udiff()函数
使用`array_udiff()`函数可以自定义比较函数。该函数将比较两个数组并返回不同值的元素列表。以下是该函数的语法:
```
array_udiff(array1, array2, array3, ..., cmp_function)
```
其中`array1`为主数组,`array2`,`array3`等为要和主数组进行比较的数组,`cmp_function`为比较函数,用于比较主数组和其他数组。
```php
function compare($a, $b) {
if ($a === $b) {
return 0;
}
return ($a > $b) ? 1 : -1;
}
$array1 = array('a', 'b', 'c', 'd');
$array2 = array('b', 'e', 'f');
$diff = array_udiff($array1, $array2, 'compare');
print_r($diff);
```
输出:
```
Array
(
[0] => a
[2] => c
[3] => d
)
```
## 总结
以上介绍了几种比较数组并返回差异的方法。根据实际使用场景,选择合适的方法来实现该需求。