'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