Похожие ответы:
Для примера вы предоставили, вы можете попробовать следующее:
$a = [1,2,3,4,5,5,4,3,2,1,2,3,4,5];
var_dump($a);
$b = [1,2,2,2,5,5];
var_dump($b);
$c = array_diff($a, $b);
var_dump($c);
Это должно дать вам следующий результат :
array (size=14)
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
5 => int 5
6 => int 4
7 => int 3
8 => int 2
9 => int 1
10 => int 2
11 => int 3
12 => int 4
13 => int 5
array (size=6)
0 => int 1
1 => int 2
2 => int 2
3 => int 2
4 => int 5
5 => int 5
array (size=6)
2 => int 3
3 => int 4
6 => int 4
7 => int 3
11 => int 3
12 => int 4
Update
Найдено ответ here.
Я завернул решение в полезную функцию:
function array_diff_duplicates($array1, $array2) {
$counts = array_count_values($array2);
$result = array_filter($array1, function($o) use (&$counts) {
return empty($counts[$o]) || !$counts[$o]--;
});
sort($result, SORT_NUMERIC);
return $result;
}
Попытка следующее:
$a = [1,2,3,4,5,5,4,3,2,1,2,3,4,5];
$b = [1,2,2,2,5,5];
$c = array_diff_duplicates($a, $b);
var_dump($c);
дает ожидаемый результат:
array (size=8)
0 => int 1
1 => int 3
2 => int 3
3 => int 3
4 => int 4
5 => int 4
6 => int 4
7 => int 5
Не уверен, что есть Bult в для этого, одним из подходов будет фильтрация массива (см. мой ответ). – Cristik
Я ответил вам, выход отличается. Может быть, мне нужно погрузиться в коллекцию php и найти там решение? – user3345632