A lot of people seem to trip up on this and ask me questions as to debugging. Bear in mind that this returns boolean, and does not return an array of affected items.
$array = array("One"=>1, "Three" => 3,"Two" =>2);
print_r(asort($array));
If successful, will return 1, and error if there is a string used. Useful to note so then people stop asking me :D
arsort
(PHP 4, PHP 5)
arsort — 連想キーと要素との関係を維持しつつ配列を逆順にソートする
説明
bool arsort
( array &$array
[, int $sort_flags
] )
この関数は、連想配列において各配列のキーと要素との関係を維持しつつソートを行います。
この関数は、主に実際の要素の並び方が重要である連想配列をソートするために使われます。
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
例
例1 arsort() の例
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
arsort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
?>
上の例の出力は以下となります。
a = orange d = lemon b = banana c = apple
fruits はアルファベットの逆順にソートされ、 各要素とキーとの関係は維持されます。
arsort
jordancdarwin at googlemail dot com
16-Dec-2007 07:21
16-Dec-2007 07:21
Scott Woods
03-Feb-2005 01:21
03-Feb-2005 01:21
Note about "morgan at anomalyinc dot com"'s comment:
As of PHP4, you can just use array_multisort() to sort parallel or multi-dimensional arrays.
rodders_plonker at yahoo dot com
22-Aug-2000 10:43
22-Aug-2000 10:43
I was having trouble with the arsort() function on an older version of PHP which was returning an error along the lines of 'wrong perameter count for function arsort' when I tried to use a flag for numeric sorting (2/SORT_NUMERIC).
I figured, as I only wanted to sort integers, I could pad numbers from the left to a specific length with 0's (using the lpad function provided by improv@magma.ca in the notes at http://www.php.net/manual/ref.strings.php).
A string sort then correctly sorts numerically (i.e. {30,2,10,21} becomes {030,021,010,002} not {30,21,2,10}) when echoing the number an (int)$string_name hides the leading 0's.
Made my day :).
Rodders.
morgan at anomalyinc dot com
25-Nov-1999 12:30
25-Nov-1999 12:30
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