4.16. Sorting an Array
Problem
You want to sort an array in a specific way.
Solution
To sort an array using the traditional definition of sort, use
sort( )
:
$states = array('Delaware', 'Pennsylvania', 'New Jersey');
sort($states);
To
sort numerically, pass SORT_NUMERIC as the second
argument to sort( ).
$scores = array(1, 10, 2, 20); sort($scores, SORT_NUMERIC);
This resorts the numbers in ascending order (1, 2, 10, 20) instead of lexicographical order (1, 10, 2, 20).
Discussion
The sort( ) function doesn’t
preserve the
key/value association between elements;
instead, entries are reindexed starting at 0 and
going upward. (The one exception to this rule is a one-element array;
its lone element doesn’t have its index reset to
0. This is fixed as of PHP 4.2.3.)
To preserve the key/value links, use asort( ). The
asort( ) function is normally used for associative
arrays, but it can also be useful when the indexes of the entries are
meaningful:
$states = array(1 => 'Delaware', 'Pennsylvania', 'New Jersey');
asort($states);
while (list($rank, $state) = each($states)) {
print "$state was the #$rank state to join the United States\n";
}Use natsort( )
to sort the array using a natural sorting
algorithm. Under natural sorting, you can mix strings and numbers
inside your elements and still get the right answer.
$tests = array('test1.php', 'test10.php', 'test11.php', 'test2.php');
natsort($tests);The elements are now ordered: 'test1.php',
'test2.php', 'test10.php', and
'test11.php'. With natural ...