2016-10-25 2 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 
    ] 
] 

ご覧のとおり、この配列はアルファベット順です。私がしたかったのは、この配列を "キー"フィールドで並べ替えることですが、整数値であると考えて配列します。期待される結果は次のとおりです。

"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

を。 してください、見てくださいhttp://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value – Mistery

答えて

1

あなたはusort機能と一緒に自然の比較使用することができます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がusort関数を指摘したとき、私はそれを検索し始め、PHPで自然なソートを見つけました。私は私の答えを投稿するつもりです –

2

natsort

natsortを試してみては - 使用して配列をソート"natural order"アルゴリズム。

+0

正しい!そんなにありがとうございます –

関連する問題