php – 如何在array陣列上使用array_unique?
我有一個數組
Array( [0] => Array ( [0] => 33 [user_id] => 33 [1] => 3 [frame_id] => 3 ) [1] => Array ( [0] => 33 [user_id] => 33 [1] => 3 [frame_id] => 3 ) [2] => Array ( [0] => 33 [user_id] => 33 [1] => 8 [frame_id] => 8 ) [3] => Array ( [0] => 33 [user_id] => 33 [1] => 3 [frame_id] => 3 ) [4] => Array ( [0] => 33 [user_id] => 33 [1] => 3 [frame_id] => 3 )
)
你可以看到鍵0與1,3和4相同.鍵2與它們不同.
對它們執行array_unique函式時,只剩下的是
Array ( [0] => Array ( [0] => 33 [user_id] => 33 [1] => 3 [frame_id] => 3 )
)
為什麼array_unique不能按預期工作的任何想法?
:
Note: Two elements are consideredequal if and only if (string) $elem1=== (string) $elem2. In words: when the string representation is the same.The first element will be used.
陣列的字串表示形式就是陣列,不管它的內容如何.
您可以使用以下操作來做所需的操作:
$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將會佔用
獨特的專案的關鍵
地圖/唯一功能(由於源陣列的鍵被保留)並拉
他們從您的原始來源
陣列.
http://stackoverflow.com/questions/2561248/how-do-i-use-array-unique-on-an-array-of-arrays