阵列交集 - 仅一次

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);

Loop through first array. If second array has value put it to result and remove from second array.

$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'

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);
}

try this

<?php
$array1 = array('apple', 'orange', 'orange', 'apricot', 'melon', 'watermelon');
$array2 = array('apple', 'orange');
$result = array_intersect($array1, $array2);
$result = array_unique($result);
?>

This is worked for me

$result = array_flip( array_flip( array_intersect($array1, $array2) ) );

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));