只在字母上排序php

时间:2017-10-16 09:29:29

标签: php arrays sorting

我想对数组进行排序,但我希望它忽略数字(最初)。

示例数组:

"description" => array:10 [▼
  9 => "Do something"
  5 => "Feedback 6 okt"
  6 => "Feedback 8 jun" //Wrong
  4 => "Feedback 9 okt"
  1 => "Feedback 11 okt"
  2 => "Feedback 12 okt"
  0 => "Feedback 13 okt"
  7 => "Fixes"
  8 => "Realisation"
  3 => "Sweet"
]

所以现在它按字母顺序排序,这很好。但如上所述,反馈8 jun是错误的。

应该是这样的:

"description" => array:10 [▼
  9 => "Do something"
  6 => "Feedback 8 jun"
  5 => "Feedback 6 okt"
  4 => "Feedback 9 okt"
  1 => "Feedback 11 okt"
  2 => "Feedback 12 okt"
  0 => "Feedback 13 okt"
  7 => "Fixes"
  8 => "Realisation"
  3 => "Sweet"
]

所以它自动命令,但它忽略了数字(起初),并且在数组按字母排序后,它可以根据数字对其余部分进行排序。

顺便说一句:现在我正在使用natsort()对其进行排序。

1 个答案:

答案 0 :(得分:3)

你应该使用usort()来实现你自己的比较函数,它首先比较没有任何数字的两个字符串(对此使用preg_replace('/\d+/', '', $str)),然后,如果两个字符串比较相等,则使用{{ 3}}以strnatcmp()的方式比较字符串(包括数字)。

usort($array, function($a, $b) {
    $cmp = strcmp(preg_replace('/\d+/', '', $a), preg_replace('/\d+/', '', $b));
    if ($cmp) {
        return $cmp;
    } else {
        return strnatcmp($a, $b);
    }
});