我有这个多维数组:
$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 - 根据一列中的值对行数组进行自然排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314923/