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 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)