2016-10-25 22 views
0

我有一個這樣的數組,來自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 
    ] 
] 

正如你可以看到這個數組是按字母順序排列的。我想要做的就是通過「key」字段來排列這個數組,但是通過把它看作是一個整數值來排序它。預期的結果是:

"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 
    ] 

] 
+0

嘗試使用usort功能。 請看,看看http://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value – Mistery

回答

1

您可以使用自然比較usort函數一起:

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

謝謝你做到了!但我使用$ a ['key'],$ b ['key'] –

0

是的,你可以使用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; 
}); 
+0

你好!謝謝您的回答!。正如@Mistery指出,我開始搜索它並發現在PHP中自然排序的usort功能。我會發布我的回答 –

2

嘗試natsort

natsort - 使用排序數組「自然順序」算法。

+0

正確!非常感謝 –