1

根据 PHP 文档,array_unique删除重复值并首先将值排序为字符串。

当您记住以下代码段时:

// define a simple array of strings, unordered
$brands = [ "BMW", "Audi", "BMW", "Chrysler", "Daewoo"];

// distinct the values, and sort them
echo array_unique($brands, SORT_STRING);

我希望输出是:

expected: {"0":"Audi","1":"BMW","3":"Chrysler","4":"Daewoo"}
actual  : {"0":"BMW","1":"Audi","3":"Chrysler","4":"Daewoo"}

问题是:为什么 array_unique 不对这些值进行排序?将 sort_flags 参数更改为四个选项中的任何一个,或将其留空,也没有效果。

根据其他 SO 问题,例如“为什么数组对值进行唯一排序”,我可能在这里遗漏了一些明显的东西。此外,使用array_values(array_unique($brands)), 作为这个问题的答案似乎也不起作用。

更新:正如有用的评论和答案中所述,sort_flags参数实际上是一种内部比较行为,或者说相等运算符。

4

2 回答 2

3

在手册中,它们意味着值按值分组,并为每个重复值采用第一个键。

你需要这样的东西

$brands = array_unique($brands);
sort($brands);

SORT_STRING - 默认

于 2014-08-23T08:47:12.157 回答
2

该文档仅指定算法如何在内部工作以实现其目的。为什么以及如何在另一个问题中得到很好的解释。它并不是说返回的结果也会被排序。排序超出了此功能的范围,并且在大多数情况下可能实际上是不受欢迎的。

为了完整起见,这就是你如何唯一(那是动词吗?)并对数组进行排序:

$array = array_unique($array);
sort($array);
于 2014-08-23T08:48:03.973 回答