PHP Arrays
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.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.
No comments:
Post a Comment