📌  相关文章
📜  比较两个数组并返回差异 php (1)

📅  最后修改于: 2023-12-03 15:11:01.359000             🧑  作者: Mango

比较两个数组并返回差异

在开发中,经常需要比较两个数组的差异,并找出差异部分。PHP提供了多种方式来实现该需求:

array_diff()函数

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
)
```

## 总结

以上介绍了几种比较数组并返回差异的方法。根据实际使用场景,选择合适的方法来实现该需求。