$arr = asort($arr);
//some magic code goes here, $arr is not changed
$arr = array_unique($arr);我是否应该再次使用asort来确保$arr被取消了?我的测试表明,不,我不知道。但是我不确定array_unique是否真的删除了2nd+重复的元素。
发布于 2013-09-10 13:09:33
您只想确保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_NATURAL组合,以不敏感地对字符串进行排序。如果您在asort中使用这两种方法中的任何一种,那么您必然需要在array_unique之后再次使用asort。
发布于 2013-09-10 13:07:33
不不需要。array_unique将只删除元素,因此顺序将始终保持不变。
发布于 2013-09-10 12:54:46
如果在“asort()”之后不修改数组,则将对数组进行排序。
https://stackoverflow.com/questions/18719426
复制相似问题