elasticsearch,Php,Arrays,Sorting,elasticsearch" /> elasticsearch,Php,Arrays,Sorting,elasticsearch" />

Php 多维数组在强制转换为整数时按值排序

Php 多维数组在强制转换为整数时按值排序,php,arrays,sorting,elasticsearch,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

我有一个这样的数组,它来自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:

usort($a['buckets'], function($a, $b) {
  $a_int = (integer) $a['key'];
  $b_int = (integer) $b['key'];
  if ($a_int === $b_int) return 0;
  return ($a_int > $b_int) ? 1 : -1;
});

是的,您可以使用usort…以下是一个示例,说明如何使用usort:

usort($a['buckets'], function($a, $b) {
  $a_int = (integer) $a['key'];
  $b_int = (integer) $b['key'];
  if ($a_int === $b_int) return 0;
  return ($a_int > $b_int) ? 1 : -1;
});
试试

natsort-使用“自然顺序”算法对数组进行排序。

尝试


natsort-使用“自然顺序”算法对数组进行排序。

您可以使用自然比较和usort函数:

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

您可以使用自然比较和usort函数:

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

尝试使用usort函数。请看,试着使用usort函数。请看那边,你好!谢谢你的回答!。正如@Mistery指出的usort函数,我开始搜索它,并在php中找到了自然排序。我要把我的答案贴出来你好!谢谢你的回答!。正如@Mistery指出的usort函数,我开始搜索它,并在php中找到了自然排序。我要把我的答案贴出来!非常感谢你的纠正!多谢各位