【问题标题】:Sorting an array properly with php用php正确排序数组
【发布时间】:2010-07-23 18:08:54
【问题描述】:

我有一个要排序的数组,它包含带有文件扩展名的图像,文件名是数字,文件扩展名显然是一个字符串。

$files = array();
$files[] = '4.jpg';
$files[] = '14.jpg';
$files[] = '1.jpg';
$files[] = '44.jpg';

如果我使用 sort() 那么我会得到以下结果:

sort($files);
print_r($files);

Array
(
    [0] => 1.jpg
    [1] => 14.jpg
    [2] => 4.jpg
    [3] => 44.jpg
)

我真正想要的是:

Array
(
    [0] => 1.jpg
    [1] => 4.jpg
    [2] => 14.jpg
    [3] => 44.jpg
)

这可能吗?

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    最快最简单的方法是使用natsort() - http://php.net/manual/en/function.natsort.php

    例如:

    natsort($files);
    print_r($files);
    
    Array
    (
        [0] => 1.jpg
        [1] => 4.jpg
        [2] => 14.jpg
        [3] => 44.jpg
    )
    

    此函数实现了一种排序算法,该算法以人类的方式对字母数字字符串进行排序,同时保持键/值关联。这被描述为“自然排序”。

    您还可以在sort() 函数中使用 sort_flags 选项

    sort($files, SORT_NUMERIC);
    print_r($files);
    
    Array
    (
        [0] => 1.jpg
        [1] => 4.jpg
        [2] => 14.jpg
        [3] => 44.jpg
    )
    

    可选的第二个参数 sort_flags 可用于使用这些值修改排序行为:

    排序类型标志:

    SORT_REGULAR - 正常比较项目(不要更改类型)

    SORT_NUMERIC - 以数字方式比较项目

    SORT_STRING - 将项目作为字符串进行比较

    SORT_LOCALE_STRING - 根据当前语言环境将项目作为字符串进行比较。在 PHP 4.4.0 和 5.0.2 中添加,它使用系统语言环境,可以使用 setlocale() 更改。

    【讨论】:

      【解决方案2】:
      $files = array();
      $files[] = '4.jpg';
      $files[] = '14.jpg';
      $files[] = '1.jpg';
      $files[] = '44.jpg';
      sort($files, SORT_NUMERIC);
      print_r($files);
      
      Array
      (
          [0] => 1.jpg
          [1] => 4.jpg
          [2] => 14.jpg
          [3] => 44.jpg
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多