php - 多维数组按值排序,同时将其转换为整数

标签 php arrays sorting elasticsearch

我有一个像这样的数组,它来自ElasticSearch。由于我无法从Elasticsearch订购此汇总。 Elasticsearch仅支持按计数顺序或按字母顺序排序。我决定在PHP方面进行此操作。

"buckets" => array:8 [
  0 => array:2 [
    "key" => "1 Ft."
    "doc_count" => 6
  ]
  1 => array:2 [
    "key" => "10 Ft."
    "doc_count" => 10
  ]
  2 => array:2 [
    "key" => "15 Ft."
    "doc_count" => 10
  ]
  3 => array:2 [
    "key" => "20 Ft."
    "doc_count" => 10
  ]
  4 => array:2 [
    "key" => "25 Ft."
    "doc_count" => 10
  ]
  5 => array:2 [
    "key" => "3 Ft."
    "doc_count" => 10
  ]
  6 => array:2 [
    "key" => "5 Ft."
    "doc_count" => 10
  ]
  7 => array:2 [
    "key" => "7 Ft."
    "doc_count" => 10
  ]
]

如您所见,该数组是按字母顺序排列的。我想做的是通过“键”字段对该数组进行排序,但是通过认为它是整数值来对其进行排序。预期结果是:
"buckets" => array:8 [
  0 => array:2 [
    "key" => "1 Ft."
    "doc_count" => 6
  ]
  1 => array:2 [
    "key" => "3 Ft."
    "doc_count" => 10
  ]
  2 => array:2 [
    "key" => "5 Ft."
    "doc_count" => 10
  ]
  3 => array:2 [
    "key" => "7 Ft."
    "doc_count" => 10
  ]
  4 => array:2 [
    "key" => "10 Ft."
    "doc_count" => 10
  ]
  5 => array:2 [
    "key" => "15 Ft."
    "doc_count" => 10
  ]
  6 => array:2 [
    "key" => "20 Ft."
    "doc_count" => 10
  ]
  7 => array:2 [
    "key" => "25 Ft."
    "doc_count" => 10
  ]

]

最佳答案

您可以将自然比较与usort函数一起使用:

usort($buckets, function($a, $b) {
    return strnatcmp($a->key, $b->key);
});

关于php - 多维数组按值排序,同时将其转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40244359/

相关文章:

JavaScript - 无法打印具有相同键名称的元素

linux - 有没有办法捕获请求日志文件中没有响应的行?

algorithm - 算法的运行时间和输入大小如何告诉您算法的时间复杂度?

javascript - 使用 Ajax 查询数据库

javascript - 根据对象值从数组中删除对象

javascript - 如何为可以在任何页面中使用的弹出程序创建外部js文件?

c - 文件范围内可变修改的数组

python - 如何用(python)列表中的顺序替换数字

javascript - PHP数组数据转换为JS(Canvas JS)

php - ajax 喜欢/不喜欢按钮不切换回来