array_unique для объектов? - PullRequest
       55

array_unique для объектов?

71 голосов
/ 11 марта 2010

Есть ли какой-либо метод, например array_unique для объектов? У меня есть куча массивов с объектами 'Role', которые я объединяю, и затем я хочу удалить дубликаты:)

Ответы [ 12 ]

0 голосов
/ 20 апреля 2016

вменяемый и быстрый способ, если вам нужно отфильтровать дублированные экземпляры (т.е. сравнение "===") из массива и:

  • вы уверены, что массив содержит только объекты
  • ключи вам не нужны

есть:

//sample data
$o1 = new stdClass;
$o2 = new stdClass;
$arr = [$o1,$o1,$o2];

//algorithm
$unique = [];
foreach($arr as $o){
  $unique[spl_object_hash($o)]=$o;
}
$unique = array_values($unique);//optional - use if you want integer keys on output
0 голосов
/ 21 февраля 2011

array_unique работает путем приведения элементов к строке и сравнения. Если ваши объекты однозначно не преобразуются в строки, они не будут работать с array_unique.

Вместо этого реализуйте функцию сравнения с состоянием для ваших объектов и используйте array_filter , чтобы выбросить то, что функция уже видела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...