$arr = asort($arr);
//some magic code goes here, $arr is not changed
$arr = array_unique($arr);
我应该再次使用 asort 以确保$arr
已排序吗?我的测试表明,不,我没有。但我不确定 100% 是否真的删除了 2nd+ 重复元素array_unique
。
您只想确保asort
和array_unique
使用相同的sort_flags。
默认情况下:
- 数组 array_unique ( 数组 $array [, int $sort_flags = SORT_STRING ] )
- 布尔排序 ( 数组 &$array [, int $sort_flags = SORT_REGULAR ] )
因此,您可以看到每个算法都将基于不同的算法进行排序,该算法可能大部分匹配,但您希望它显式匹配。因此,聪明的钱是做出这样的决定:
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
asort($input,SORT_REGULAR);
print_r($input);
print "n";
$result = array_unique($input,SORT_REGULAR);
print_r($result);
结果是:
Array
(
[1] => blue
[a] => green
[b] => green
[2] => red
[0] => red
)
Array
(
[1] => blue
[a] => green
[2] => red
)
另请注意,如果您只是运行array_unique
而没有初始asort
,您将获得不同的结果。
最后请注意,asort
支持两个array_unique
不支持的标志:
-
SORT_NATURAL
- 使用"自然排序"将项目作为字符串进行比较像natsort() -
SORT_FLAG_CASE
- 可以组合(按位 OR) 与SORT_STRING
或SORT_NATURA
L 以不区分大小写的方式对字符串进行排序
如果您在asort
中使用这两个中的任何一个,那么您必须在array_unique
后再次asort
。
不,你不需要。 array_unique只会删除元素,因此将始终保留顺序。
如果你在 'asort()' 之后不修改数组,数组将被排序。
不,你不应该。该功能array_unique
保留键,因此无需再次对其进行排序。