我想对数组进行排序,但我希望它忽略数字(最初)。
示例数组:
"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()对其进行排序。
答案 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);
}
});