Recipe 4.16. Sorting an Array


4.16.1. Problem

You want to sort an array in a specific way.

4.16.2. 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).

4.16.3. 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 sorting, the number 10 comes after the number 2; the opposite occurs under traditional sorting. For case-insensitive natural sorting, use natcasesort( ).

To sort the array in reverse order, use rsort( ) or arsort( ), which is like rsort( ) but also preserves keys. There is no natrsort( ) or natcasersort( ). You can also pass SORT_NUMERIC into these functions.

4.16.4. See Also

Recipe 4.17 for sorting with a custom comparison function and Recipe 4.18 for sorting multiple arrays; documentation on sort( ) at http://www.php.net/sort, asort( ) at http://www.php.net/asort, natsort( ) at http://www.php.net/natsort, natcasesort( ) at http://www.php.net/natcasesort, rsort( ) at http://www.php.net/rsort, and arsort( ) at http://www.php.net/arsort.




PHP Cookbook, 2nd Edition
PHP Cookbook: Solutions and Examples for PHP Programmers
ISBN: 0596101015
EAN: 2147483647
Year: 2006
Pages: 445

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net