php 取出数组的交集,php-如何获取多维数组的交集?
时间: 2023-12-24 21:13:15 浏览: 57
要获取数组的交集,可以使用 PHP 内置函数 `array_intersect`,这个函数可以获取两个或多个数组的交集。
例如,要获取两个一维数组 `$arr1` 和 `$arr2` 的交集,可以这样写:
```php
$arr1 = array('apple', 'banana', 'orange');
$arr2 = array('banana', 'pear', 'orange');
$result = array_intersect($arr1, $arr2);
print_r($result);
```
输出:
```
Array
(
[1] => banana
[2] => orange
)
```
要获取多维数组的交集,可以使用递归函数实现,比如这个函数:
```php
function multi_array_intersect($arrays) {
if (count($arrays) == 1) {
return $arrays[0];
}
$first = array_shift($arrays);
$intersect = array();
foreach ($first as $value) {
foreach ($arrays as $key => $array) {
if (!is_array($array)) {
$array = array($array);
}
$arrays[$key] = array_values($array);
$found = false;
foreach ($array as $subvalue) {
if (is_array($value) && is_array($subvalue)) {
if (multi_array_intersect(array($value, $subvalue)) === $value) {
$found = true;
break;
}
} else if ($value === $subvalue) {
$found = true;
break;
}
}
if (!$found) {
continue 2;
}
}
$intersect[] = $value;
}
return $intersect;
}
```
这个函数可以接受一个多维数组作为参数,返回这些数组的交集。例如:
```php
$arr1 = array(
array('name' => 'apple', 'color' => 'red'),
array('name' => 'banana', 'color' => 'yellow'),
array('name' => 'orange', 'color' => 'orange')
);
$arr2 = array(
array('name' => 'banana', 'color' => 'yellow'),
array('name' => 'pear', 'color' => 'green'),
array('name' => 'orange', 'color' => 'orange')
);
$result = multi_array_intersect(array($arr1, $arr2));
print_r($result);
```
输出:
```
Array
(
[0] => Array
(
[name] => banana
[color] => yellow
)
[1] => Array
(
[name] => orange
[color] => orange
)
)
```
注意,这个函数的实现方式比较复杂,因此在处理大量数据时可能会比较慢。如果需要处理大量数据,可以考虑其他更高效的算法。
阅读全文