这是因为
array_unique使用字符串比较来比较项目。从文档:
注意:当且仅当(string)$ elem1 ===(string)$
elem2,两个元素才被视为相等。换句话说:当字符串表示相同时。将使用第一个元素。
数组的字符串表示形式就是单词
Array,无论其内容是什么。
您可以使用以下方法完成您想做的事情:
$arr = array( array('user_id' => 33, 'frame_id' => 3), array('user_id' => 33, 'frame_id' => 3), array('user_id' => 33, 'frame_id' => 8));$arr = array_intersect_key($arr, array_unique(array_map('serialize', $arr)));//result:array 0 => array 'user_id' => int 33 'user' => int 3 2 => array 'user_id' => int 33 'user' => int 8运作方式如下:
每个数组项都已序列化。根据阵列的内容,这将是唯一的。
这样的结果一直运行到
array_unique
,因此仅保留具有唯一签名的数组。array_intersect_key
将从map / unique函数中获取唯一项的键(因为保留了源数组的键),并将其从原始源数组中拉出。



