【问题标题】:array_unique does not sort a simple string arrayarray_unique 不对简单的字符串数组进行排序
【发布时间】:2014-08-23 08:35:04
【问题描述】:

根据 PHP 文档,array_unique 删除重复值并首先对作为字符串处理的值进行排序。

当您记住以下 sn-p 时:

// 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 问题,例如"Why does array unique sort the values",我可能在这里遗漏了一些明显的东西。此外,使用array_values(array_unique($brands)),如this question 中的答案所述,似乎也不起作用。

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

【问题讨论】:

  • array_unique 不会对数组元素进行排序。它只是从数组中删除重复值。该手册仅提及有关内部(临时)数组处理的 sorts 词。这并不意味着真正的数组排序
  • 那么,实际上'sort_flag'真的应该被解释为'compare_behaviour'吗?如果是这样,命名约定和前面提到的帖子让我在这部分感到困惑。

标签: php arrays sorting array-unique


【解决方案1】:

在手册中,它们表示值按值分组,并且为每个重复值采用的第一个键。

你需要这样的东西

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

SORT_STRING - 默认

【讨论】:

  • 你不能这样称呼sort,顺便说一句。
  • sort 不返回排序后的数组,它返回一个布尔值,指示它是否成功。它依赖于通过引用传递的数组,我认为这与使用函数的结果不兼容。
  • 这可行:$brands = array_unique($brands); sort($brands);
【解决方案2】:

文档只是指定了算法如何在内部工作以实现其目的。为什么以及如何在the other question 中有很好的解释。它并不是说返回的结果也会被排序。排序超出了此函数的范围,并且实际上可能大部分时间都不需要。

为了完整起见,这就是你的独特之处(那是动词吗?)并且对数组进行排序:

$array = array_unique($array);
sort($array);

【讨论】:

  • 添加一个快速的两行示例以使您的答案完整并没有什么坏处。
  • @Tom 究竟是什么?
  • 一个如何获取数组的排序的唯一值的示例。
  • 我以为我只是在回答问题为什么array_unique_doesn't_ sort。如果他们愿意的话,我认为 OP 可以手动完成......?! :)
  • 郑重声明,它不是动词 :)
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多