Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sorting a php array alphanumerically

Tags:

php

sorting

I know there are natsort() and natcasesort() functions in php to sort 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 apply natsort(), '10..' and '13..' are placed above '1a..'. how can I make my php code to think that '10..' is greater than '1a...' and '1a...' should be at the top? the correct output in my particular case is:

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

i used a custom algo but it does the same...it places '10..' before '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;
}
like image 647
samach Avatar asked Nov 28 '11 12:11

samach


People also ask

How do I sort an array numerically in PHP?

PHP - Sort Functions For Arrayssort() - sort arrays in ascending order. rsort() - sort arrays in descending order. asort() - sort associative arrays in ascending order, according to the value. ksort() - sort associative arrays in ascending order, according to the key.

How do you sort an array from highest to lowest in PHP?

The rsort() is an inbuilt function in PHP and is used to sort the array in descending order i.e, greatest to smallest. It sorts the actual array and hence changes are reflected in the array itself.

How do you sort an array in numerical order?

In order to sort a list in numerical order, the Array. prototype. sort() method needs to be passed a comparison function. To sort the array numerically in ascending order, That comparison function should return the difference between the two numbers.


1 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);
like image 79
Alex Pliutau Avatar answered Oct 05 '22 19:10

Alex Pliutau