当前位置: 首页 > 面试题库 >

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

鲁品
2023-03-14
问题内容

我有一个数组

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使用字符串比较来比较项目。从文档:

注意:当且仅当(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

运作方式如下:

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

  2. 这样的结果一直运行到array_unique,因此仅保留具有唯一签名的数组。

  3. array_intersect_key 将从map / unique函数中获取唯一项的键(因为保留了源数组的键),并将其从原始源数组中拉出。



 类似资料:
  • 提示:给定一个整数数组,如果该数组在2旁边包含2或在4旁边包含4,则返回true,但不能同时包含这两个。 我只使用了数组,没有使用列表方法,但我想这样做是为了练习。这是我所拥有的,数组。asList()让我有些悲伤。 更新:部分问题是使用int而不是整数。新代码:

  • 我正在这样使用spring boot和rest模板。 在上面的代码中,我得到了字符串形式的响应。我想将每个值映射到一个pojo类,并将其插入到我的数据库中。现在我还不知道如何将这些数组映射到pojo类中。

  • 我正在处理一个freecodecamp挑战,我想知道为什么我的代码不工作,以及如何纠正它。 目标是“返回一个数组,该数组由每个提供的子数组中的最大数组成。” 我的尝试是使用减少作为映射函数映射输入数组: 当前输出为: 我应该如何修复我的代码?

  • 我有一个名为的数组。它包含一系列对象,每个对象都包含一个名为的属性。我想在数组中的每个对象上重复该数组的内容。 如果我重复通过它在单个数组上运行良好。 但是,我想继续重复,就像这样: 等等。 我的(不正确)解决方案当前看起来如下: 在这种情况下,我假设$index将代表递增的整数,但它不起作用。有人能帮忙吗? 提前感谢...

  • 问题内容: 我试图更好地掌握numpy数组,所以我有一个关于它们的示例问题: 假设我有一个名为a的numpy数组。我想对进行操作,使其中的所有小于0的值递增,其余的保持不变。例如,如果我有: 我想返回: 最紧凑的语法是什么? 谢谢! 问题答案:

  • 我想在tarantool中使用数组位。我需要类似redis的操作:setbit、getbit和bitCount。狼蛛有可能吗?