PHP Conference Japan 2024

arsort

(PHP 4, PHP 5, PHP 7, PHP 8)

arsort以遞減順序排序陣列並維持索引關聯

說明

arsort(陣列 &$array, 整數 $flags = SORT_REGULAR): true

array 就地以遞減順序排序,使其鍵保持與其關聯值的相關性。

這主要用於排序關聯式陣列,其中實際元素的順序很重要。

注意:

如果兩個成員比較相等,它們會保留其原始順序。在 PHP 8.0.0 之前,它們在排序陣列中的相對順序未定義。

注意:

將陣列的內部指標重置為第一個元素。

參數

array

輸入的陣列。

flags

可選的第二個參數 flags 可用於使用以下值修改排序行為

排序類型標記

返回值

始終返回 true

更新日誌

版本 說明
8.2.0 返回類型現在是 true;以前是 bool

範例

範例 #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

水果已按字母反向排序,並且每個元素關聯的索引已保留。

另請參閱

新增註釋

使用者貢獻的註釋 3 則註釋

morgan at anomalyinc dot com
25 年前
如果您需要排序一個多維陣列,例如:

$TeamInfo[$TeamID]["WinRecord"]
$TeamInfo[$TeamID]["LossRecord"]
$TeamInfo[$TeamID]["TieRecord"]
$TeamInfo[$TeamID]["GoalDiff"]
$TeamInfo[$TeamID]["TeamPoints"]

假設您這裡有 100 支隊伍,並且想要根據 "TeamPoints" 排序

首先,建立您的多維陣列。然後,建立另一個單維陣列,用第一個陣列的分數填充,並使用對應的 team_id 作為索引... 例如
$foo[25] = 14
$foo[47] = 42
或其他任何值。
現在,使用 asort 或 arsort 對第二個陣列進行排序。
由於陣列現在已按分數或勝/負或您放入的任何內容排序,索引都已經重新排列了。
如果您只是遍歷陣列,抓取每個項目的索引,(參考 asort 的例子,那個 for 迴圈就是這樣做的),那麼您獲得的索引將直接指向多維陣列的值之一。
如果不清楚,請寄信給我...
-mo
stephenakins at gmail dot com
7 年前
我有兩台伺服器;一台運行 5.6,另一台運行 7。在這兩台伺服器上使用這個函式,當所有值都相同時,會得到不同的結果。

<?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 結果
陣列 ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )
陣列 ( [658] => 2 [696] => 2 [702] => 2 [703] => 2 [706] => 2 )

PHP 7 結果
陣列 ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )
陣列 ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )
FatBat
13 年前
需要取得關聯陣列中最大/最高值的索引。
max() 只返回了值,沒有索引,所以我改用這個方法。

<?php
reset
($x); // 可選。
arsort($x);
$key_of_max = key($x); // 返回索引。
?>
To Top