duanfenhui5511 2017-02-19 17:58
浏览 34
已采纳

PHP和订购带有数字和文本的数组项

I'm using PHP. I have an array which has 1-256 items. Here is an example:

$arr[] = "(1.) Ben";
$arr[] = "Albert";
$arr[] = "Bill";
$arr[] = "(2.) Paul";
$arr[] = "(5.) Martin";
$arr[] = "(12.) Mike";
$arr[] = "(20.) John";

Question 1:

I would like to order the items alphabetically by names. So, the result should be this:

Albert
(1.) Ben
Bill
(20.) John
(5.) Martin
(12.) Mike
(2.) Paul

Question 2:

I also would like to order the items by 1) numbers and 2) names like this way:

(1.) Ben
(2.) Paul
(5.) Martin
(12.) Mike
(20.) John
Albert
Bill

How could I do the job with PHP?

  • 写回答

3条回答 默认 最新

  • duanmu2015 2017-02-19 18:27
    关注

    It's sorting for Question 1:

    <?php
    
    $arr[] = "(1.) Ben";
    $arr[] = "Albert";
    $arr[] = "Bill";
    $arr[] = "(2.) Paul";
    $arr[] = "(5.) Martin";
    $arr[] = "(12.) Mike";
    $arr[] = "(20.) John";
    
    usort($arr, function($a, $b){
        $a = explode(' ', $a, 2);
        $a = (count($a) > 1) ? $a[1] : $a[0];
    
        $b = explode(' ', $b, 2);
        $b = (count($b) > 1) ? $b[1] : $b[0];
    
        return strcmp($a, $b);
    });
    
    print_r($arr); //  // Print array sorted for 'Question 1'
    

    @EDIT And sorting for Question 2:

    $arr[] = "(1.) Ben";
    $arr[] = "Albert";
    $arr[] = "Bill";
    $arr[] = "(2.) Paul";
    $arr[] = "(5.) Martin";
    $arr[] = "(12.) Mike";
    $arr[] = "(20.) John";
    
    usort($arr, function($a, $b){
        $a = explode(' ', $a, 2);
        $b = explode(' ', $b, 2);
    
        if(count($a) > 1 && count($b) > 1)
        {
            $a = str_replace(['(', ')', '.'], '', $a[0]);
            $b = str_replace(['(', ')', '.'], '', $b[0]);
    
            return $a > $b;
        }
        else
        {
            return strcmp($a[0], $b[0]);
        }
    });
    
    print_r($arr); // Print array sorted for 'Question 2'
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 javaweb登陆的网页为什么不能正确连接查询数据库
  • ¥15 数学建模数学建模需要
  • ¥15 已知许多点位,想通过高斯分布来随机选择固定数量的点位怎么改
  • ¥20 nao机器人语音识别问题
  • ¥15 怎么生成确定数目的泊松点过程
  • ¥15 layui数据表格多次重载的数据覆盖问题
  • ¥15 python点云生成mesh精度不够怎么办
  • ¥15 QT C++ 鼠标键盘通信
  • ¥15 改进Yolov8时添加的注意力模块在task.py里检测不到
  • ¥50 高维数据处理方法求指导