Как избавиться от повторяющихся элементов в массиве массивов?
Коллеги!
Не знает ли кто-нибудь, как можно удалить массивы-дубли в массиве массивов, то есть устранить элементы, у которых повторяются и ключ, и значение, и значение значения... Попробовал вот это для приведенного ниже примера:
$test = array_unique_key($test, 'id');
print_r($test);
но он удаляет и те элементы, в которых ключи одинаковы, но некоторые значения различаются. Просто array_unique дает результат только с двумерными массивами...
$test = array(
array(
'id' => 1,
'name' => 'Диски Sparco',
'price' => 5000,
),
array(
'id' => 1,
'name' => 'Диски Sparco',
'price' => 5000,
),
array(
'id' => 2,
'name' => 'Диски Sparco',
'price' => 6342,
),
);
Ответы (2 шт):
Так:
$uniqueDecodedItems = array_unique(array_map('json_encode', $array));
$result = array_map('json_decode', $uniqueDecodedItems, [true]);
Или в одну строку:
$result = array_map('json_decode', array_unique(array_map('json_encode', $array)), [true]);
На выходе:
//------------------------------
// Output:
//------------------------------
Array
(
[0] => Array
(
[id] => 1
[name] => Диски Sparco
[price] => 5000
)
[2] => Array
(
[id] => 2
[name] => Диски Sparco
[price] => 6342
)
)
Для начала следует обратить внимание на то, что в одном массиве не могут существовать два элемента с одним ключом. Так что array_unique_key просто не имеет смысла. Получается, что вас интересуют именно повторяющиеся значения (хотя бы эти значения и массивы). Идём на php.net/array_unique, читаем... и обнаруживаем интересный атрибут $flags!
$test = array(
array(
'id' => 1,
'name' => 'Диски Sparco',
'price' => 5000,
),
array(
'id' => 1,
'name' => 'Диски Sparco',
'price' => 5000,
),
array(
'id' => 2,
'name' => 'Диски Sparco',
'price' => 6342,
),
);
var_dump(array_unique($test, SORT_REGULAR));
Вжух!