按名称PHP排序数组

时间:2018-05-02 08:31:55

标签: php arrays sorting

我有这个关联数组,我想按自定义顺序排序(不只是按字母顺序排列)

$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',
];

我需要此输出:

$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'
];

如何对数组进行排序(保持键值关联)

  • 按字母顺序排序数组
  • 在此之后,所有以文本开头的值都必须位于顶部

我已经尝试使用函数uasort,但无法找到如何从 Text 开始对它们进行排序。

谢谢

3 个答案:

答案 0 :(得分:3)

您可以使用uasort(),并在sort函数中检查值是否以"Text"开头。如果是这样,请使用此案例排序,否则,自然排序:

$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);

输出:

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
)

答案 1 :(得分:1)

使用asorthttp://php.net/manual/en/function.asort.php

 asort($arr);

asort() - 维持关键关联:是的。

答案 2 :(得分:0)

$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',
    ];

    rsort($arr);
    var_dump($arr);