新手在这里,所以我对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
ONCE。目前它返回苹果,然后是橙色,然后是另一个橙色。我错过了什么,或者我只是使用了错误的功能。
编辑:根据答案,我必须澄清这一点。如果第二个数组是
$array1 = array(apple, orange, orange, apricot, melon, watermelon);
$array2 = array(apple, orange, orange);
我希望结果有2个橙子,所以array_unique
不会这样做。
$result = array(apple, orange, orange);
答案 0 :(得分:2)
如果只需要一次结果,则必须使用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);
}
答案 1 :(得分:1)
试试这个
<?php
$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$result = array_intersect($array1, $array2);
$result = array_unique($result);
?>
答案 2 :(得分:1)
循环通过第一个数组。如果第二个数组有值,则将其置于结果并从第二个数组中删除。
$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'
答案 3 :(得分:0)
这对我有用
$result = array_flip( array_flip( array_intersect($array1, $array2) ) );
答案 4 :(得分:0)
你可能需要这样的东西吗? 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));