'Array Intersection - only once
Newbie here, so I have a problem with the array_intersect function. I am comparing two arrays with intersection but I get some results twice. For example: 2 arrays
$array1 = array(apple, orange, orange, apricot, melon, watermelon);
$array2 = array(apple, orange);
$result = array_intersect($array1, $array2); This returns:
$result = array(apple, orange, orange);
But I want this:
$result = array(apple, orange);
I want this to return apple and orange ONCE each. Currently it returns apple, then orange, and then another orange. Am I missing something or am I simply using the wrong function.
edit: Based on the answers I have to clarify this. If the 2nd array is
$array1 = array(apple, orange, orange, apricot, melon, watermelon);
$array2 = array(apple, orange, orange);
I want the result to have 2 oranges, so array_unique wont do it.
$result = array(apple, orange, orange);
Solution 1:[1]
If you want only the results once, you have to filter them with array_unique(). array_intersection() only results what they have in common. And that's orange, in your case twice in $array1. The question is why are there two orange in $array1?
http://ch2.php.net/manual/en/function.array-unique.php
edit: This could work:
$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);
}
Solution 2:[2]
All of the earlier answers have missed your intention. You wish to retain elements from $array2 that are found in $array1. You merely need to reverse the order function parameters. array_intersect() returns values from the first parameter that are found in subsequent parameters.
Code: (Demo)
$array1 = ['apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon'];
$array2 = ['apple', 'orange', 'orange'];
var_export(
array_intersect($array2, $array1)
);
Output:
array (
0 => 'apple',
1 => 'orange',
2 => 'orange',
)
Solution 3:[3]
try this
<?php
$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$result = array_intersect($array1, $array2);
$result = array_unique($result);
?>
Solution 4:[4]
This is worked for me
$result = array_flip( array_flip( array_intersect($array1, $array2) ) );
Solution 5:[5]
May be you need something like this ? 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));
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | mickmackusa |
| Solution 3 | noufalcep |
| Solution 4 | |
| Solution 5 | Angel Bonev |
