【问题标题】:Best way to sort an array of data in PHP在 PHP 中对数据数组进行排序的最佳方法
【发布时间】:2016-01-07 19:12:10
【问题描述】:

所以我有以下数据数组:

array (size=10)
  0 => int 5
  1 => string '5B1' (length=7)
  2 => int 4
  3 => string '4B1' (length=7)
  4 => int 3
  5 => string '3B1' (length=7)
  6 => int 2
  7 => string '2B1' (length=7)
  8 => int 1
  9 => string '1B1' (length=7)

我想做的就是把它排序为:

array (size=10)
  0 => string 5B1
  1 => int '5' (length=7)
  2 => string 4B1
  3 => int '4' (length=7)
  4 => string 3B1
  5 => int '3' (length=7)
  6 => string 2B1
  7 => int '2' (length=7)
  8 => string 1B1
  9 => int '1' (length=7)

数字的层次结构永远不会改变,尽管有一个额外的级别,如下所示:

7 -> 6b2 -> 6b1 -> 6 -> 5b2 -> 5b1 -> 5 4b2 -> 4b1 -> 4 -> 3b2 -> 3b1 -> 3 -> 2b2 -> 2b1 -> 2 -> 1b2 -> 1b1 -> 1 -> b2 -> b1

我想知道用 PHP 进行排序的最佳方法是什么?

一方面,我正在考虑从上到下循环遍历静态层次结构数组,并使用它对动态数组进行排序。

还有其他建议吗?

【问题讨论】:

  • 您是否考虑过使用带有SORT_NATURAL 标志的PHP 的rsort() 函数?
  • 你试过测试自己吗?阅读有关数组相关方法的手册?
  • php.net/manual/en/array.sorting.php 列出数组排序函数
  • @MarkBaker 是的,我已经非常广泛地阅读了这本手册。这似乎是一个简单的解决方案,但并不像您最初想象的那么简单。 rsort 的顺序错误 (5 -> 5b1 -> 4b1 -> 4 as 与 5b1 -> 5 -> 4b1-> 4) 相对。我不相信有一个预先构建的函数可以对此进行排序,因此我对使用比较数组提出了疑问。

标签: php arrays sorting


【解决方案1】:

这个问题的答案很简单,马克贝克让我走上了正轨。

我最初使用 rsort、krsort 和 array_flip 之间的复杂组合来获得一个几乎可以工作的解决方案。

使用带有 SORT_NATURAL 标志的 rsort 就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2017-05-23
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2013-12-19
    相关资源
    最近更新 更多