2017-10-16 50 views
0

我想排序数组,但我希望它忽略数字(起初)。仅在字母上排序php

实例阵列:

"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君是错误的。

它应该是这样的:

"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" 
] 

所以它会自动订单,但它忽略的数字(在第一次)和阵列上的字母排序之后,那么就可以根据编号顺序休息。

btw:现在我使用natsort()对它进行排序。

+1

解决方法是去除数字,以便您可以使用任何排序函数并将它传递给一个干净的参数以便按照您的要求进行排序。 – Calimero

+0

8> 6不!当php遇到一个数字它按它排序,反馈字符串是相同的,所以它开始按数字排序 – madalinivascu

+0

嗯,我不希望它在数字上排序,我想要它专注于'好', 'jun'数字前 –

回答

3

您应该使用usort()实现自己的比较功能,第一,没有任何号码(使用preg_replace('/\d+/', '', $str)本),然后两个字符串进行比较,如果两个字符串作为平等相比,使用strnatcmp()比较字符串(包括数字)以natsort()的方式。

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

这工作。谢谢! –