【问题标题】:How can I sort an alphanumerical Multidimensional Array in php?如何在 php 中对字母数字多维数组进行排序?
【发布时间】:2022-02-02 21:30:13
【问题描述】:

我在一个多维数组中有一些 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。

【问题讨论】:

  • 编写自定义回调函数或usort,从文件名中拆分数字部分,转换为int并使用它进行排序。
  • 我是否遗漏了什么,或者似乎是work?键只需要重置
  • @SimoneRossaini,我忘了说它是一个对象数组。我已经更新了问题。
  • @AlinCrescensCiurea 你能编辑我的例子并与我们分享正确的数据吗?

标签: php sorting php-7.0


【解决方案1】:

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

Your fiddle edited

参考:


正如@u_mulder 建议的strnatcasecmp 将改进代码如下:

usort($array, function($a, $b) {
    return strnatcasecmp($a['name'], $b['name']);
});

参考:

【讨论】:

  • return strcmp 大概?
  • @u_mulder 你能给我举个例子吗?尝试让我错了。
  • 我的错,只是return strnatcasecmp($a['name'], $b['name']);
  • @u_mulder 感谢您的建议,我从未停止学习 :)
  • 谢谢你,@SimoneRossaini。这个解决方案完成了工作。事实上,@u_mulder、strnatcasecmp 看起来更优雅。 :)
猜你喜欢
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 2018-03-09
  • 2021-10-12
  • 2016-10-16
  • 1970-01-01
相关资源
最近更新 更多