Alphanumeric php array sorting

I know that in php there are natsort () and natcasesort () functions for sorting array elements in natural order. I am trying to sort the following items.

array[0]= '10. xyz'; array[1]= '13. xyz'; array[2]= '2. xyz'; array[3]= '1a. xyz'; array[4]= '6. xyz'; array[5]= '1b. xyz'; array[6]= '4a. xyz'; array[7]= '4b. xyz'; 

now if i applied natsort (), '10 .. 'and '13 ..' are placed above '1a ..'. how can i make my php code think that "10 .." is greater than "1a ..." and "1a ..." should be at the top? correct conclusion in my particular case:

 '1a. xyz'; '1b. xyz'; '2. xyz'; '4a. xyz'; '4b. xyz'; '6. xyz'; '10. xyz'; '13. xyz'; 

I used a custom algorithm, but it does the same ... it puts '10 .. 'in front of' 1a ... '. heres my custom func:

 function cmp($a, $b) { $a_ex=explode(".",$a); $b_ex=explode(".",$b); if ($a_ex[0] == $b_ex[0] ) { return 0; } return ($a_ex[0] < $b_ex[0]) ? -1 : 1; } 
+7
source share
3 answers

Use natsort ():

 $array[0]= '10. xyz'; $array[1]= '13. xyz'; $array[2]= '2. xyz'; $array[3]= '1a. xyz'; $array[4]= '6. xyz'; $array[5]= '1b. xyz'; $array[6]= '4a. xyz'; $array[7]= '4b. xyz'; natsort($array); print_r($array); 
+5
source

natsort works great for me ...

Otherwise, use str_pad to format numbers before sorting the array.

Or you can usort create a custom function, perhaps with intval ...

+1
source

use usort your own algorithm

0
source

All Articles