【问题标题】:Case sort by A-Z Ascending and 0-9 Descending?大小写按 A-Z 升序和 0-9 降序排序?
【发布时间】:2014-10-28 04:17:09
【问题描述】:

我有图像数组,例如

    [Images] => Array
        (
            [0] => /var/www/httpdocs/images/products/detail/10396-alt-1.jpg
            [1] => /var/www/httpdocs/images/products/detail/10396-main-599.jpg
        )

    [Images] => Array
        (
            [0] => /var/www/httpdocs/images/products/category/10167-main-354.jpg
            [1] => /var/www/httpdocs/images/products/detail/10167-alt-1.jpg
            [2] => /var/www/httpdocs/images/products/detail/10167-alt-2.jpg
            [3] => /var/www/httpdocs/images/products/category/10168-main-361.jpg
            [4] => /var/www/httpdocs/images/products/category/10168-main-360.jpg
        )

我想按基本名称排序,但也按字母数字以特定方式排序

我总是希望前 5 位数字在 alpha 升序排序 (z-a) 后按数字排序,然后最后一位数字降序排序。我将如何做到这一点?

示例输出应该是这样的

    [Images] => Array
        (
            [0] => /var/www/httpdocs/images/products/detail/10396-main-599.jpg
            [1] => /var/www/httpdocs/images/products/detail/10396-alt-1.jpg
        )

    [Images] => Array
        (
            [0] => /var/www/httpdocs/images/products/category/10167-main-354.jpg
            [1] => /var/www/httpdocs/images/products/category/10168-main-360.jpg
            [2] => /var/www/httpdocs/images/products/category/10168-main-361.jpg
            [3] => /var/www/httpdocs/images/products/detail/10167-alt-1.jpg
            [4] => /var/www/httpdocs/images/products/detail/10167-alt-2.jpg
        )

【问题讨论】:

  • 你能提供一个想要的结果的例子吗?
  • 是的,等一下,我会提供结果和更深入的数组

标签: php sorting


【解决方案1】:
  1. 从路径中提取文件名:10396-main-599
  2. 用'-'作为分隔符分割文件名10396,main,599
  3. 使用比较函数对路径进行排序

    function is_path_less($split_path1,$split_path2){
      if($split_path1[0] == $split_path2[0]){
        if($split_path1[1] == $split_path2[1]){
          return $split_path1[2] < $split_path2[2];
        }else{
          return $split_path1[1] > $split_path2[1];
        }
      }else{
        return $split_path1[0] < $split_path2[0];
      }
    }
    

其中$split_path1$split_path2 是 ["10396","main","599"] 和 ["10396","alt","1"]

结果将是:

["10396","main","599"]
["10396","alt","1"]

【讨论】:

    猜你喜欢
    • 2012-11-08
    • 2023-03-07
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2021-01-23
    • 2018-11-20
    相关资源
    最近更新 更多