![](/img/trans.png)
[英]How to sort rows based on a column that contains array values (PHP/MySQL/jQuery)
[英]Natural sort an array of rows based on values in one column
我有這個多維數組:
$data[] = array('name' => 'Mini 16', 'id' => 105);
$data[] = array('name' => 'Mini 15', 'id' => 5650);
$data[] = array('name' => 'Mini 100', 'id' => 9889);
$data[] = array('name' => 'Mini 20', 'id' => 587);
我想自然地按name
列排序對數組進行排序,但對我來說很難。
預期結果:
[
['name' => 'Mini 15', 'id' => 5650],
['name' => 'Mini 16', 'id' => 105],
['name' => 'Mini 20', 'id' => 587],
['name' => 'Mini 100', 'id' => 9889]
]
您可以使用usort()
通過自定義函數對數組進行排序,並使用strnatcmp()
對兩個字符串進行自然比較,如下所示:
usort( $data, function( $el1, $el2) { return strnatcmp( $el1['name'], $el2['name']); });
所以之前,你的數組是這樣的:
array(4) {
[0]=>
array(2) {
["name"]=>
string(7) "Mini 16"
["id"]=>
int(105)
}
[1]=>
array(2) {
["name"]=>
string(7) "Mini 15"
["id"]=>
int(5650)
}
[2]=>
array(2) {
["name"]=>
string(8) "Mini 100"
["id"]=>
int(9889)
}
[3]=>
array(2) {
["name"]=>
string(7) "Mini 20"
["id"]=>
int(587)
}
}
array(4) {
[0]=>
array(2) {
["name"]=>
string(7) "Mini 15"
["id"]=>
int(5650)
}
[1]=>
array(2) {
["name"]=>
string(7) "Mini 16"
["id"]=>
int(105)
}
[2]=>
array(2) {
["name"]=>
string(7) "Mini 20"
["id"]=>
int(587)
}
[3]=>
array(2) {
["name"]=>
string(8) "Mini 100"
["id"]=>
int(9889)
}
}
請注意,對於較低版本的 PHP,您將無法使用匿名函數,而是需要以下內容:
usort( $data, create_function( '$el1, $el2', 'return strnatcmp( $el1[\'name\'], $el2[\'name\']);' ));
如果您使用的是 PHP 5.4 或更新版本,您可以使用帶有SORT_NATURAL
標志的array_multisort
。 只需遵循http://php.net/manual/en/function.array-multisort.php文檔中的示例 #3,但添加SORT_NATURAL
選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.