When you try to use sort()
or rsort()
functions with an associative array, it works but the keys are then all lost. To keep key-value association intact, you must use one of the following sorting functions:
asort()
Sort associative arrays by values in ascending orderarsort()
Sort associative arrays by values in descending order
Sorting associative arrays alphabeticallyksort()
Sort arrays by keys in ascending orderkrsort()
Sort arrays by keys in descending order
These functions always return TRUE
. These functions are useful mainly for associative arrays and accept two parameters:
- array as input
- Sorting flags (optional) to modify the behavior of the sort.
<?php /*Sorting Associative Arrays (Syntax) ksort (array &$array, int $flags = SORT_REGULAR): bool krsort(array &$array, int $flags = SORT_REGULAR): bool asort (array &$array, int $flags = SORT_REGULAR): bool arsort(array &$array, int $flags = SORT_REGULAR): bool */
asort
Sort associative arrays by values in ascending order
<?php $a = ['two' => 'II','four' => 'IV', 'three' => 'III', 'one' => 'I']; asort($a); print_r($a); /* Prints Array ( [one] => I [two] => II [three] => III [four] => IV ) */
Like sort( )
this function rearranges the elements in the subject array from lowest to highest. The following example shows a simple array sorted by asort( )
:
<?php $map = array("o"=>"kk", "e"=>"zz", "z"=>"hh", "a"=>"rr"); asort($map); print_r($map);
The print_r( )
function outputs the structure of the sorted array:
Array ( [z] => hh [o] => kk [a] => rr [e] => zz )
When assort( )
and arsort( )
are used on nonassociative arrays, the order of the elements is arranged in sorted order, but the indexes that access the elements don’t change. This might seem a bit weird; effectively the indexes are treated as association keys in the resulting array. The following example shows what is happening:
<?php $numbers = array(24, 19, 3, 16, 56, 8, 171); asort($numbers); print_r($numbers);
This outputs:
Array ( [2] => 3 [5] => 8 [3] => 16 [1] => 19 [0] => 24 [4] => 56 [6] => 171 )
arsort
Sort associative arrays by values in descending order
<?php $a = ['two' => 'II','four' => 'IV', 'three' => 'III', 'one' => 'I']; arsort($a); print_r($a); /* Prints Array ( [four] => IV [three] => III [two] => II [one] => I ) */
Like rsort( )
this function rearranges the elements in the subject array from highest to lowest. The following example shows a simple array sorted by arsort( )
:
<?php $map = array("o"=>"kk", "e"=>"zz", "z"=>"hh", "a"=>"rr"); arsort($map); print_r($map); /* Prints Array ( [e] => zz [a] => rr [o] => kk [z] => hh ) */
Sorting Associative Arrays Alphabetically
<?php $a = ['tf'=>24, 'nt'=>19, 'te'=>3, 'sn'=>16, 'fs'=>56, 'et'=>8, 'oso'=>171]; asort($a); print_r($a);
The output of the example shows the result:
//Numerically sorted Array ( [te] => 3 [et] => 8 [sn] => 16 [nt] => 19 [tf] => 24 [fs] => 56 [oso] => 171 )
By default, PHP sorts strings in alphabetical order and numeric values in numeric order. An optional parameter, sorting flag
, can be passed to force the string or numeric sorting behavior. In the following example, the PHP constant SORT_STRING
sorts the numbers as if they were strings:
<?php $a = ['tf'=>24, 'nt'=>19, 'te'=>3, 'sn'=>16, 'fs'=>56, 'et'=>8, 'oso'=>171]; asort($a, SORT_STRING); print_r($a);
The output of the example shows the result:
//Alphabetically sorted Array ( [sn] => 16 [oso] => 171 [nt] => 19 [tf] => 24 [te] => 3 [fs] => 56 [et] => 8 )
ksort
Sort arrays by keys in ascending order
ksort( )
sorts the elements in an array from lowest key to highest key (in alphabetic order). The following example demonstrates the ksort( )
function.
<?php $a = ['two' => 'II','four' => 'IV', 'three' => 'III', 'one' => 'I']; ksort($a); print_r($a); /* Prints Array ( [four] => IV [one] => I [three] => III [two] => II ) */
ksort()
function, another example:
<?php $map = array("o"=>"kk", "e"=>"zz", "z"=>"hh", "a"=>"rr"); ksort($map); print_r($map); /* Prints Array ( [a] => rr [e] => zz [o] => kk [z] => hh ) */
krsort
Sort arrays by keys in descending order
krsort( )
sorts the elements in the subject array from highest key to lowest key (in reverse alphabetic order). The following example demonstrates the krsort( )
function:
<?php $a = ['two' => 'II','four' => 'IV', 'three' => 'III', 'one' => 'I']; krsort($a); print_r($a); /* Prints Array ( [two] => II [three] => III [one] => I [four] => IV )
krsort()
function, another example:
<?php $map = array("o"=>"kk", "e"=>"zz", "z"=>"hh", "a"=>"rr"); krsort($map); print_r($map); /* Prints Array ( [z] => hh [o] => kk [e] => zz [a] => rr ) */
More Posts on PHP Sorting Arrays: