1

我在一个多维数组中有一些 json 文件名,像这样创建:$files[] = array("name" => $file, "type" => "json")我想像这样升序排序

1.File
2.File
3.File
10.File
11.File

如果我使用 phpsort($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。

4

1 回答 1

2

您使用多维数组,如您所见 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']);
});

参考:

于 2022-02-02T13:22:50.387 回答