gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:04:35 29 4
gpt4 key购买 nike

我有一个数组

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com