内容简介:http://stackoverflow.com/questions/2561248/how-do-i-use-array-unique-on-an-array-of-arrays
我有一个数组
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不能按预期工作的任何想法?
这是因为array_unique使用字符串比较来比较项目.从 docs
:
Note: Two elements are considered equal 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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入浅出HTML5编程
弗里曼 (Eric Friiman)、罗布森 (Elisabdth Robson) / 东南大学出版社 / 2012-4 / 98.00元
《深入浅出HTML5编程(影印版)(英文)》就是你的特快车票,它可以带你学习如何使用今天的标准同时也会是明日的最佳实践来搭建Web应用。同时,你会了解HTML5的新API的基本知识,甚至你还会弄明白这些API是如何与你的网页进行交互,JaVaScript如何为它们提供动力,以及你如何使用它们来搭建能够打动你的老板并且吸引你的朋友的Web应用。一起来看看 《深入浅出HTML5编程》 这本书的介绍吧!