Вот улучшенная версия ответа @ ryeguy :
<?php
$arr = array(
array('user_id' => 33, 'tmp_id' => 3),
array('user_id' => 33, 'tmp_id' => 4),
array('user_id' => 33, 'tmp_id' => 5)
);
# $arr = array_intersect_key($arr, array_unique(array_map('serialize', $arr)));
$arr = array_intersect_key($arr, array_unique(array_map(function ($el) {
return $el['user_id'];
}, $arr)));
//result:
array
0 =>
array
'user_id' => int 33
'tmp_id' => int 3
Во-первых, он не выполняет ненужную сериализацию. Во-вторых, иногда атрибуты могут отличаться, даже если идентификатор один и тот же.
Я столкнулся с этим с Google Places API . Я совмещал результаты нескольких запросов с разными типами объектов (думаю тегами). Но я получил дубликаты, так как объект может быть разбит на несколько категорий (типов). И метод с serialize
не работал, так как атрибуты были другими, а именно, photo_reference
и reference
. Вероятно, это как временные идентификаторы.