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;
}
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.
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.
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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With