[英]How can I sort a multidimensional array naturally?
我有一個像這樣的數組:
[
['number' => '419-1'],
['number' => '302-1'],
['number' => '102-1'],
['number' => '102-11'],
['number' => '203-1'],
['number' => '508-1'],
['number' => '105-1'],
['number' => '102-2'],
['number' => '302-2'],
]
我想要這樣的輸出:
[
['number' => '102-1'],
['number' => '102-2'],
['number' => '102-11'],
['number' => '105-1'],
['number' => '203-1'],
['number' => '302-1'],
['number' => '302-2'],
['number' => '419-1'],
['number' => '508-1']
]
問題是數字存儲為字符串。 我想將數字視為整數。 排序需要按數字進行。 沒有字符串比較。 我嘗試過usort,但這沒有幫助。
有人可以幫幫我嗎?
$arr = [
['number' => '419-1'],
['number' => '419-11'],
['number' => '102-1'],
['number' => '203-1'],
['number' => '508-1'],
['number' => '105-1'],
['number' => '102-2'],
['number' => '302-2'],
];
usort($arr, function($a,$b){
$an = explode('-',$a['number']);
$bn = explode('-',$b['number']);
if($an[0] == $bn[0]){
return $an[1]*1 > $bn[1]*1;
}
return $an[0]*1 > $bn[0]*1;
});
print_r($arr);
你是想數組值,自然排序1, 2, 10, 20
,使他們不排序作為數字串1, 10, 2, 20
。 其結果在PHP 5和PHP 7中應該相同。
您可以將array_multisort
與SORT_ASC
和SORT_NATURAL
標志一起使用,以及array_column
來檢索要排序的值。
PHP 5.5以上
array_multisort(array_column($ar, 'number'), SORT_ASC, SORT_NATURAL, $ar);
var_export($ar);
或者,您可以將strnatcmp
與usort
strnatcmp
使用。
PHP 5.3以上
usort($ar, function($a, $b) {
return strnatcmp($a['number'], $b['number']);
});
var_export($ar);
結果
array (
0 =>
array (
'number' => '102-1',
),
1 =>
array (
'number' => '102-2',
),
2 =>
array (
'number' => '102-11',
),
3 =>
array (
'number' => '105-1',
),
4 =>
array (
'number' => '203-1',
),
5 =>
array (
'number' => '302-1',
),
6 =>
array (
'number' => '302-2',
),
7 =>
array (
'number' => '419-1',
),
8 =>
array (
'number' => '508-1',
),
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.