php - 如何在数组数组上使用 array_unique?

标签 php arrays 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 没有按预期工作吗?

最佳答案

这是因为 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.

数组的字符串表示只是单词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

这是它的工作原理:

  1. 每个数组项都是序列化的。这个 将根据数组的唯一性 内容。

  2. 这个结果通过array_unique运行, 所以只有具有唯一性的数组 留下签名。

  3. array_intersect_key 将采取 独特元素的 key 来自 map/unique 函数(因为源数组的键被保留)并拉 他们出自您的原始来源 数组。

关于php - 如何在数组数组上使用 array_unique?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2561248/

相关文章:

php - 从 MySQL 数据库的序列化数组中的字符串中删除 "%"

php - Bootstrap 下拉菜单在 php codeigniter 中不起作用

php - 在 phpunit 中模拟请求

arrays - 将数组数组转换为 JSON

php - array_unique PHP 的 Action 数

php - 我将如何更改我从数据库中检索的每个元素的 CSS 类?

python - 如何在 python 中绘制数组?

php - 从此数组中仅选择唯一的数组值

php - 从不区分大小写的数组中删除重复值的最佳解决方案

c - Struct realloc 内的动态字符串数组