dounielong7728 2017-10-09 12:39
浏览 326
已采纳

当值具有字符串和数字时,如何对数组进行排序

I have an array i want to sort it into ascending order.

Below is array i have.

Array

[0] => 101.6mm x 101.6mm 
[1] => 50.8mm x 50.8mm 
[3] => 76.2mm x 76.2mm 
[4] => 100mm x 100mm 
[5] => 15mm x 15mm 
[6] => 20mm x 20mm 
[8] => 25mm x 25mm 
[10] => 30mm x 30mm 
[12] => 40mm x 40mm 
[13] => 50mm x 50mm 
[14] => 60mm x 60m 
[15] => 80mm x 80mm 

Thanks in advance

  • 写回答

3条回答 默认 最新

  • drk7700 2017-10-09 13:33
    关注

    You just need to write custom string parts comparison function for usort():

    $products = [
                    "101.6mm x 101.6mm",
                    "50.8mm x 50.8mm",
                    "76.2mm x 76.2mm",
                    "100mm x 100mm",
                    "15mm x 15mm",
                    "20mm x 20mm",
                    "50mm x 50.2mm",
                    "25mm x 25mm",
                    "30mm x 45mm",
                    "30mm x 30mm",
                    "40mm x 40mm",
                    "50mm x 50mm",
                    "60mm x 60m",
                    "80mm x 80mm",
        ];
    
    usort($products,
        function($a, $b) {
            list($vals_a, $vals_b) = [explode('x', $a), explode('x', $b)];
            $vals_a[0] = preg_replace('/(\s|mm)/mui', '',$vals_a[0]);
            $vals_a[1] = preg_replace('/(\s|mm)/mui', '',$vals_a[1]);
            $vals_b[0] = preg_replace('/(\s|mm)/mui', '',$vals_b[0]);
            $vals_b[1] = preg_replace('/(\s|mm)/mui', '',$vals_b[1]);
            if ($vals_a[0] < $vals_b[0])
                return -1;
            elseif ($vals_a[0] > $vals_b[0])
                return +1;
            else {
                if ($vals_a[1] < $vals_b[1])
                    return -1;
                elseif ($vals_a[1] > $vals_b[1])
                    return +1;
                else return 0;
            }
        });
    
    var_dump($products);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?
  • ¥50 invest生境质量模块