Как убрать дублирующиеся значения из многомерного массива в PHP?
Как убрать дублирующиеся значения из многомерного массива в PHP?
$arr = [
'a' => [100, 101, 102],
'b' => [100, 103, 104],
];
// Убираем дублирующиеся значения
// Ожидаемый результат
$arr = [
'a' => [101, 102],
'b' => [103, 104],
];
Всем спасибо, в итоге, на английском стаке нашёл такое решение, может кому то пригодится:
$seen = [];
foreach($arr as &$entry)
{
$entry = array_unique(array_diff($entry, $seen));
$seen = array_merge($entry, $seen);
}
unset($entry);
Правда, результат будет таким, но, мне это даже больше подходит:
$arr = [
'a' => [100, 101, 102],
'b' => [103, 104],
];
Ответы (2 шт):
Автор решения: Вадим Александру
→ Ссылка
Можно так
$arr = [
'a' => [100, 101, 102],
'b' => [100, 103, 104],
];
$all_items = [];
foreach ($arr as $it) {
$all_items = array_merge($all_items, $it);
}
$uses = array_count_values($all_items);
$response = [];
foreach ($arr as $key => $items) {
$it = [];
foreach ($items as $item) {
if($uses[$item] === 1) {
$it[] = $item;
}
}
$arr[$key] = $it;
}
print_r($arr);
Автор решения: Евгений Тихии
→ Ссылка
Как вариант предлагаю решение...)
/* Исходный массив */
$rawArr = [
'a' => [100, 101, 102, 105, 106],
'b' => [100, 103, 104, 106, 105],
];
/* Записываем пересечения в новый $interArr массив */
$interArr = array_intersect ($rawArr['a'], $rawArr['b']);
/* Формируем новый массив в цикле */
foreach ($rawArr as $indexRaw => $valueRaw) {
$diffArr[$indexRaw] = array_diff ($rawArr[$indexRaw], $interArr);
}
/* Массив без дублей */
echo '<pre>';
print_r ($diffArr);
Вывод:
Array
(
[a] => Array
(
[1] => 101
[2] => 102
)
[b] => Array
(
[1] => 103
[2] => 104
)
)