Удалить дублированные элементы ассоциативного массива в PHP

$result = array( 0=>array('a'=>1,'b'=>'Hello'), 1=>array('a'=>1,'b'=>'other'), 2=>array('a'=>1,'b'=>'other'), ); 

Если он дублируется, удалите его, поэтому результат будет следующим:

 $result = array( 0=>array('a'=>1,'b'=>'Hello'), 1=>array('a'=>1,'b'=>'other') ); 

Может ли кто-нибудь это знать?

благодаря

Независимо от того, что другие предлагают здесь, вы ищете функцию, называемую array_unique Docs . Здесь важно установить второй параметр в SORT_REGULAR а затем задание будет простым:

 array_unique($result, SORT_REGULAR); 

Значение SORT_REGULAR :

обычно сравнивайте предметы (не меняйте типы)

И это то, что вы хотите. Вы хотите сравнить массивы Docs здесь и не меняете свой тип на строку (которая была бы по умолчанию, если параметр не задан).

array_unique делает строгое сравнение ( === в PHP), для массивов это означает:

$a === $b TRUE если $ a и $ b имеют одинаковые пары ключ / значение в одном и том же порядке и одного и того же типа.

Выход ( демо ):

 Array ( [0] => Array ( [a] => 1 [b] => Hello ) [1] => Array ( [a] => 1 [b] => other ) ) 

Во-первых, вы не можете использовать plain array_unique для этой проблемы, потому что array_unique внутренне обрабатывает элементы массива как строки, поэтому «Can not convert Array to String» будут появляться при использовании array_unique для этого.

Поэтому попробуйте следующее:

 $result = array( 0=>array('a'=>1,'b'=>'Hello'), 1=>array('a'=>1,'b'=>'other'), 2=>array('a'=>1,'b'=>'other') ); $unique = array_map("unserialize", array_unique(array_map("serialize", $result))); print_r($unique); 

Результат:

 Array ( [0] => Array ( [a] => 1 [b] => Hello ) [1] => Array ( [a] => 1 [b] => other ) ) 

Сериализация очень удобна для таких проблем.

Если вы чувствуете, что для вас слишком много магии , ознакомьтесь с этим сообщением в блоге

 function array_multi_unique($multiArray){ $uniqueArray = array(); foreach($multiArray as $subArray){ if(!in_array($subArray, $uniqueArray)){ $uniqueArray[] = $subArray; } } return $uniqueArray; } $unique = array_multi_unique($result); print_r($unique); 

По иронии судьбы, in_array работает для массивов, где array_unique нет.