If you need to sort a multi-demension array, for example, an array such as
$TeamInfo[$TeamID]["WinRecord"]
$TeamInfo[$TeamID]["LossRecord"]
$TeamInfo[$TeamID]["TieRecord"]
$TeamInfo[$TeamID]["GoalDiff"]
$TeamInfo[$TeamID]["TeamPoints"]
and you have say, 100 teams here, and want to sort by "TeamPoints":
first, create your multi-dimensional array. Now, create another, single dimension array populated with the scores from the first array, and with indexes of corresponding team_id... ie
$foo[25] = 14
$foo[47] = 42
or whatever.
Now, asort or arsort the second array.
Since the array is now sorted by score or wins/losses or whatever you put in it, the indices are all hoopajooped.
If you just walk through the array, grabbing the index of each entry, (look at the asort example. that for loop does just that) then the index you get will point right back to one of the values of the multi-dimensional array.
Not sure if that's clear, but mail me if it isn't...
-mo| CARVIEW |
arsort
(PHP 4, PHP 5, PHP 7, PHP 8)
arsort — Sort an array in descending order and maintain index association
Description
Sorts array in place in descending order,
such that its keys maintain their correlation with the values they
are associated with.
This is used mainly when sorting associative arrays where the actual element order is significant.
Note:
If two members compare as equal, they retain their original order. Prior to PHP 8.0.0, their relative order in the sorted array was undefined.
Note:
Resets array's internal pointer to the first element.
Parameters
array-
The input array.
flags-
The optional second parameter
flagsmay be used to modify the sorting behavior using these values:Sorting type flags:
-
SORT_REGULAR- compare items normally; the details are described in the comparison operators section -
SORT_NUMERIC- compare items numerically -
SORT_STRING- compare items as strings -
SORT_LOCALE_STRING- compare items as strings, based on the current locale. It uses the locale, which can be changed using setlocale() -
SORT_NATURAL- compare items as strings using "natural ordering" like natsort() -
SORT_FLAG_CASE- can be combined (bitwise OR) withSORT_STRINGorSORT_NATURALto sort strings case-insensitively
-
Return Values
Always returns true.
Examples
Example #1 arsort() example
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
arsort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>The above example will output:
a = orange d = lemon b = banana c = apple
The fruits have been sorted in reverse alphabetical order, and the index associated with each element has been maintained.
See Also
- sort() - Sort an array in ascending order
- asort() - Sort an array in ascending order and maintain index association
- The comparison of array sorting functions
User Contributed Notes 3 notes
I have two servers; one running 5.6 and another that is running 7. Using this function on the two servers gets me different results when all of the values are the same.
<?php
$list = json_decode('{"706":2,"703":2,"702":2,"696":2,"658":2}', true);
print_r($list);
arsort($list);
echo "<br>";
print_r($list);
?>
PHP 5.6 results:
Array ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )
Array ( [658] => 2 [696] => 2 [702] => 2 [703] => 2 [706] => 2 )
PHP 7 results:
Array ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )
Array ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )