0
$arr = asort($arr);

//some magic code goes here, $arr is not changed

$arr = array_unique($arr);

我应该再次使用 asort 来确定$arr是 asorted 吗?我的测试表明,不,我没有。但我不确定 100% 是否array_unique真的删除了第二个以上的重复元素。

4

4 回答 4

2

您只想确保asortarray_unique使用相同的 sort_flags。

默认:

  • 数组 array_unique ( 数组 $array [, int $sort_flags = SORT_STRING ] )
  • bool asort ( 数组 &$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不支持的标志:

  1. SORT_NATURAL- 使用像 natsort() 这样的“自然排序”将项目作为字符串进行比较
  2. SORT_FLAG_CASE- 可以与 SORT_STRINGSORT_NATURAL 组合(按位或)对字符串进行不区分大小写的排序

如果你在你的中使用这两个中的任何一个,asort那么你必须在asort之后再次使用array_unique

于 2013-09-10T13:09:33.303 回答
2

不,你不需要。array_unique 只会删除元素,因此将始终保留顺序。

于 2013-09-10T13:07:33.057 回答
1

不,你不应该。该函数array_unique保留键,因此无需再次对其进行排序。

于 2013-09-10T12:56:39.463 回答
1

如果在 'asort()' 之后不修改数组,则数组将被排序。

于 2013-09-10T12:54:46.110 回答