删除PHP中关联数组的重复元素
Posted
技术标签:
【中文标题】删除PHP中关联数组的重复元素【英文标题】:Remove duplicated elements of associative array in PHP 【发布时间】:2012-12-01 05:17:40 【问题描述】:$result = array(
0=>array('a'=>1,'b'=>'Hello'),
1=>array('a'=>1,'b'=>'other'),
2=>array('a'=>1,'b'=>'other'),
);
如果是重复删除它,结果如下:
$result = array(
0=>array('a'=>1,'b'=>'Hello'),
1=>array('a'=>1,'b'=>'other')
);
有人知道这样做吗?
谢谢
【问题讨论】:
是什么让它重复a=
& b=other
或只是 b=other
...
a
和 b
@Bada 谢谢
***.com/questions/3767318/…
【参考方案1】:
无论其他人在这里提供什么,您都在寻找一个名为array_unique
Docs 的函数。这里重要的是将第二个参数设置为SORT_REGULAR
,然后工作就简单了:
array_unique($result, SORT_REGULAR);
SORT_REGULAR
标志的含义是:
正常比较项目(不要更改类型)
这就是你想要的。您想在这里compare arraysDocs 并且不要将它们的类型更改为字符串(如果未设置参数,这将是默认值)。
array_unique
进行严格比较(php 中的===
),对于数组,这意味着:
$a === $b
TRUE
如果 $a 和 $b 具有相同顺序和相同类型的相同键/值对。
输出(Demo):
Array
(
[0] => Array
(
[a] => 1
[b] => Hello
)
[1] => Array
(
[a] => 1
[b] => other
)
)
【讨论】:
酷,我不知道在 al.l 上可以使用第二个参数 @DavidMüller:这本手册总是值得一看的;)至少如果它变得具体,我就是这样做的。您无法完全了解每个功能。 为我工作,谢谢 它似乎对我不起作用。我仍然得到重复的结果。 除此解决方案外,您还可以执行 array_values() 来重新设置您的数组键。只需执行 array_values(array_unique($result, SORT_REGULAR));【参考方案2】:首先,你不能使用普通的array_unique
来解决这个问题,因为array_unique 在内部将数组项视为字符串,这就是为什么在使用array_unique 时会出现“无法将数组转换为字符串”的原因。
所以试试这个:
$result = array(
0=>array('a'=>1,'b'=>'Hello'),
1=>array('a'=>1,'b'=>'other'),
2=>array('a'=>1,'b'=>'other')
);
$unique = array_map("unserialize", array_unique(array_map("serialize", $result)));
print_r($unique);
结果:
Array
(
[0] => Array
(
[a] => 1
[b] => Hello
)
[1] => Array
(
[a] => 1
[b] => other
)
)
序列化对于此类问题非常方便。
如果您觉得这对您来说魔力太大,请查看blog post
function array_multi_unique($multiArray)
$uniqueArray = array();
foreach($multiArray as $subArray)
if(!in_array($subArray, $uniqueArray))
$uniqueArray[] = $subArray;
return $uniqueArray;
$unique = array_multi_unique($result);
print_r($unique);
具有讽刺意味的是,in_array
适用于数组,而 array_unique
不适用。
【讨论】:
嗯,实际上array_unique
很好。看我的回答:***.com/a/13860140/367456
如果您希望结果与输入格式相同(没有整数键),这就是答案。以上是关于删除PHP中关联数组的重复元素的主要内容,如果未能解决你的问题,请参考以下文章