如果数组之前被排序过,我应该在array_unique后使用 asort 吗?


$arr = asort($arr);
//some magic code goes here, $arr is not changed
$arr = array_unique($arr);

我应该再次使用 asort 以确保$arr已排序吗?我的测试表明,不,我没有。但我不确定 100% 是否真的删除了 2nd+ 重复元素array_unique

您只想确保asortarray_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不支持的标志:

  1. SORT_NATURAL - 使用"自然排序"将项目作为字符串进行比较像natsort()
  2. SORT_FLAG_CASE - 可以组合(按位 OR) 与 SORT_STRINGSORT_NATURA L 以不区分大小写的方式对字符串进行排序

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新