arsort

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

arsort按降序对数组排序并保持索引关联

说明

arsort(array &$array, int $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

水果已按反向字母顺序排序,并且与每个元素关联的索引已保留。

参见

添加注释

用户贡献的注释 6 个注释

12
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 结果
Array ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )
Array ( [658] => 2 [696] => 2 [702] => 2 [703] => 2 [706] => 2 )

PHP 7 结果
Array ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )
Array ( [706] => 2 [703] => 2 [702] => 2 [696] => 2 [658] => 2 )
14
morgan at anomalyinc dot com
24 年前
如果您需要对多维数组进行排序,例如,一个数组,如

$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
-1
FatBat
12 年前
需要获取关联数组中最大值/最高值的索引。
max() 只返回了值,没有索引,所以我做了以下操作。

<?php
reset
($x); // 可选。
arsort($x);
$key_of_max = key($x); // 返回索引。
?>
-7
rodders_plonker at yahoo dot com
23 年前
我在旧版本的 PHP 中使用 arsort() 函数时遇到了麻烦,当我尝试使用数字排序标志 (2/SORT_NUMERIC) 时,它会返回类似“函数 arsort 的参数数量错误”的错误。
我想,因为我只想对整数进行排序,我可以使用 0 对数字从左侧填充到特定长度(使用 [email protected]https://php.net/manual/ref.strings.php 中的注释中提供的 lpad 函数)。
然后,字符串排序可以正确地按数字排序(即 {30,2,10,21} 变为 {030,021,010,002} 而不是 {30,21,2,10}),当回显数字时,(int)$string_name 会隐藏前导 0。

让我的心情变得很好:)。

Rodders。
-10
jordancdarwin at googlemail dot com
16 年前
许多人似乎在这个问题上遇到了麻烦,并向我询问调试方法。请记住,它返回布尔值,而不是返回受影响项的数组。

$array = array("One"=>1, "Three" => 3,"Two" =>2);
print_r(asort($array));

如果成功,将返回 1,如果使用字符串,则会发生错误。值得注意的是,这样一来,人们就会停止问我:D
-16
sebas2day
12 年前
如果您正在处理要排序的多维数组,那么这可能会有所帮助

<?php
function array_sort($arr){
if(empty(
$arr)) return $arr;
foreach(
$arr as $k => $a){
if(!
is_array($a)){
arsort($arr); // 可以使用任何类型的排序
return $arr;
}else{
$arr[$k] = array_sort($a);
}
}
return
$arr;
}
?>
To Top