$arr = asort($arr);
//some magic code goes here, $arr is not changed
$arr = array_unique($arr);
我应该再次使用 asort 来确定$arr
是 asorted 吗?我的测试表明,不,我没有。但我不确定 100% 是否array_unique
真的删除了第二个以上的重复元素。
$arr = asort($arr);
//some magic code goes here, $arr is not changed
$arr = array_unique($arr);
我应该再次使用 asort 来确定$arr
是 asorted 吗?我的测试表明,不,我没有。但我不确定 100% 是否array_unique
真的删除了第二个以上的重复元素。
您只想确保asort
并array_unique
使用相同的 sort_flags。
默认:
因此,您可以看到每个都将根据不同的算法进行排序,这些算法可能大部分都匹配,但您希望它显式匹配。因此,聪明的钱正在做出如下决定:
<?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
- 可以与
SORT_STRING
或SORT_NATURA
L 组合(按位或)对字符串进行不区分大小写的排序如果你在你的中使用这两个中的任何一个,asort
那么你必须在asort
之后再次使用array_unique
。
不,你不需要。array_unique 只会删除元素,因此将始终保留顺序。
不,你不应该。该函数array_unique
保留键,因此无需再次对其进行排序。
如果在 'asort()' 之后不修改数组,则数组将被排序。