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);
Advertisement
Answer
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'