douwen1901 2018-05-02 08:31
浏览 36
已采纳

按名称PHP排序数组

I have this associative array that I want to sort in a custom order (not just alphabetically):

$arr = [
    '1' => 'Lorem Ipsum 1',
    '2' => 'Lorem Ipsum 3',
    '3' => 'Lorem Ipsum 2',
    '4' => 'Text A',
    '5' => 'Text B',
    '6' => 'Text C',
    '7' => 'Lorem Ipsum 4',
    '8' => 'Text D',
    '9' => 'Text E',
];

I need this output:

$arr = [
    '4' => 'Text A',
    '5' => 'Text B',
    '6' => 'Text C',
    '8' => 'Text D',
    '9' => 'Text E',
    '1' => 'Lorem Ipsum 1',
    '3' => 'Lorem Ipsum 2',
    '2' => 'Lorem Ipsum 3',
    '7' => 'Lorem Ipsum 4'
];

How the array needs to be sorted (keep key-value association)

  • Sort Array Alphabetically
  • After this, all values that start with Text have to be on top

I already tried it with the function uasort, but could not find out how to sort them starting with Text.

Thank you

  • 写回答

3条回答 默认 最新

  • dongmi1995 2018-05-02 08:41
    关注

    You can use uasort(), and in the sort function, check if the value starts by "Text". If so, sort using this case, otherwise, sort naturally:

    $arr = [
        '1' => 'Lorem Ipsum 1',
        '2' => 'Lorem Ipsum 3',
        '3' => 'Lorem Ipsum 2',
        '4' => 'Text A',
        '5' => 'Text B',
        '6' => 'Text C',
        '7' => 'Lorem Ipsum 4',
        '8' => 'Text D',
        '9' => 'Text E',
    ];
    uasort($arr, function($a, $b){
        $a_text = strpos($a, 'Text') === 0;
        $b_text = strpos($b, 'Text') === 0;
        if ($a_text != $b_text) {
            return $b_text - $a_text ;
        }
        return strnatcmp($a,$b);
    });
    print_r($arr);
    

    Output:

    Array
    (
        [4] => Text A
        [5] => Text B
        [6] => Text C
        [8] => Text D
        [9] => Text E
        [1] => Lorem Ipsum 1
        [3] => Lorem Ipsum 2
        [2] => Lorem Ipsum 3
        [7] => Lorem Ipsum 4
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里