0

这里是新手,所以我对array_intersect函数有疑问。我正在将两个数组与交集进行比较,但我得到了两次结果。例如:2个数组

$array1 = array(apple, orange, orange, apricot, melon, watermelon);
$array2 = array(apple, orange);

$result = array_intersect($array1, $array2);这将返回:

$result = array(apple, orange, orange);

但我想要这个:

$result = array(apple, orange);

我希望这个返回apple并且orange每个返回一次。目前它返回苹果,然后是橙色,然后是另一个橙色。我是遗漏了什么还是我只是使用了错误的功能。

编辑:根据答案,我必须澄清这一点。如果第二个数组是

$array1 = array(apple, orange, orange, apricot, melon, watermelon);
$array2 = array(apple, orange, orange);

我希望结果有 2 个橙子,所以array_unique不会这样做。

$result = array(apple, orange, orange);
4

6 回答 6

1

如果只需要一次结果,则必须使用 array_unique() 过滤它们。array_intersection() 只产生它们的共同点。那是橙色的,在你的情况下是 $array1 中的两次。问题是为什么$array1 中有两个橙色?

http://ch2.php.net/manual/en/function.array-unique.php

编辑:这可以工作:

$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$result = array_intersect($array1, $array2);
$diff = array_diff($result, $array2);
if(!empty($diff)) {
    $result = array_unique($result);
}
于 2014-08-01T06:49:10.820 回答
1

所有先前的答案都错过了您的意图。您希望保留在$array2中找到的元素$array1。您只需要反转 order 函数参数。 array_intersect()从后续参数中找到的第一个参数返回值。

代码:(演示

$array1 = ['apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon'];
$array2 = ['apple', 'orange', 'orange'];

var_export(
    array_intersect($array2, $array1)
);

输出:

array (
  0 => 'apple',
  1 => 'orange',
  2 => 'orange',
)
于 2022-02-21T05:02:23.917 回答
0

循环遍历第一个数组。如果第二个数组有值,则将其放入结果并从第二个数组中删除。

$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$array3 = array('apple', 'orange', 'orange');

function my_intersect($array1, $array2)
    {
    // array_walk($array1, 'sort');
    // array_walk($array2, 'sort');
    return array_filter($array1, function($item)use(&$array2)
        {
        if (($key = array_search($item, $array2)) !== false)
            {
            unset($array2[$key]);
            return true;
            }
        return false;
        });
    }

var_dump(my_intersect($array1, $array2)); // 'apple', 'orange'
var_dump(my_intersect($array1, $array3)); // 'apple', 'orange', 'orange'
于 2014-08-01T07:27:17.710 回答
0

try this

<?php
$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$result = array_intersect($array1, $array2);
$result = array_unique($result);
?>
于 2014-08-01T06:53:21.707 回答
-1

这对我有用

$result = array_flip( array_flip( array_intersect($array1, $array2) ) );
于 2014-08-01T07:19:09.663 回答
-1

可能你需要这样的东西吗?http://php.net/manual/en/function.array-intersect-assoc.php

$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$array3 = array('apple', 'orange', 'orange');


var_dump(array_intersect_assoc($array1,$array2));
var_dump(array_intersect_assoc($array1,$array3));
于 2014-08-01T09:27:56.257 回答