如何对 php 中的字母数字多维数组进行排序?
How can I sort an alphanumerical Multidimensional Array in php?
我在多维数组中有一些 json 文件名,创建方式如下:$files[] = array("name" => $file, "type" => "json")
我想 升序 排序:
1.File
2.File
3.File
10.File
11.File
如果我使用 php sort($files)
功能订购它们,它们将按如下方式订购:
1.File
10.File
11.File
2.File
3.File
但是,如果我使用 natsort($files)
引述:按照人类 (php.net) 的方式排序字母数字字符串,我就会一团糟:
3.File
2.File
10.File
1.File
11.File
是否有更好的方法使用 php 函数对数组进行排序?或者我是否必须构建自定义排序功能。服务器是 运行 PHP 7.0.
您使用多维数组,如您所见,PHP 有一个错误 (Array to string conversion
),您需要为该任务使用 usort
,例如:
$array = array(
array("name"=>'1.File', "type" => "json"),
array("name"=>'2.File', "type" => "json"),
array("name"=>'3.File', "type" => "json"),
array("name"=>'10.File', "type" => "json"),
array("name"=>'11.File', "type" => "json"),
);
usort($array, function($a, $b) {
return ($a['name'] > $b['name'])
? 1
: ($a['name'] < $b['name'])
? -1
: 0;
});
print_r($array);
参考:
正如@u_mulder 所建议的那样,strnatcasecmp
将改进如下代码:
usort($array, function($a, $b) {
return strnatcasecmp($a['name'], $b['name']);
});
参考:
我在多维数组中有一些 json 文件名,创建方式如下:$files[] = array("name" => $file, "type" => "json")
我想 升序 排序:
1.File
2.File
3.File
10.File
11.File
如果我使用 php sort($files)
功能订购它们,它们将按如下方式订购:
1.File
10.File
11.File
2.File
3.File
但是,如果我使用 natsort($files)
引述:按照人类 (php.net) 的方式排序字母数字字符串,我就会一团糟:
3.File
2.File
10.File
1.File
11.File
是否有更好的方法使用 php 函数对数组进行排序?或者我是否必须构建自定义排序功能。服务器是 运行 PHP 7.0.
您使用多维数组,如您所见,PHP 有一个错误 (Array to string conversion
),您需要为该任务使用 usort
,例如:
$array = array(
array("name"=>'1.File', "type" => "json"),
array("name"=>'2.File', "type" => "json"),
array("name"=>'3.File', "type" => "json"),
array("name"=>'10.File', "type" => "json"),
array("name"=>'11.File', "type" => "json"),
);
usort($array, function($a, $b) {
return ($a['name'] > $b['name'])
? 1
: ($a['name'] < $b['name'])
? -1
: 0;
});
print_r($array);
参考:
正如@u_mulder 所建议的那样,strnatcasecmp
将改进如下代码:
usort($array, function($a, $b) {
return strnatcasecmp($a['name'], $b['name']);
});
参考: