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

시도를에 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가 usort 함수를 지적하면서 나는 그것을 검색하기 시작했고 PHP에서 자연 정렬을 발견했습니다. 내 대답을 게시 할게요 –

2

natsort

natsort 시도가 ​​-를 사용하여 배열을 정렬 "natural order"알고리즘.

+0

맞습니다! 너무 많이 고마워요. –