Menu
CoddyTech

按值排序关联数组

本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 22 课,共 68 课。

处理关联数组时,你经常需要按值排序,同时保留键值对应关系。PHP 提供了两个专用函数来完成这项任务:asort() 用于升序排序,arsort() 用于降序排序。

下面介绍 asort() 如何按值升序排序:

<?php
$students = [
    "Alice" => 85,
    "Bob" => 92,
    "Charlie" => 78,
    "Diana" => 96
];

asort($students);
print_r($students);
// 输出:Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>

注意,现在成绩已按从低到高排列,但每个学生的姓名仍与对应的成绩正确配对。这就是 asort() 相比普通 sort() 的主要优势。它会保留键和值之间的对应关系。

对于降序排列,arsort() 的工作方式类似,但会将值从高到低排列:

<?php
arsort($students);
print_r($students);
// 输出:Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>

这两个函数都会直接修改原数组,就像对应的索引数组函数一样。因此,它们非常适合整理学生成绩、商品价格等数据,也适用于任何需要按值排序并保留键值对的场景。

challenge icon

挑战

简单

你会收到一个输入:一个包含员工姓名及其薪水的关联数组,格式为 JSON。读取输入,将 JSON 字符串转换为数组,使用 arsort() 按薪水从高到低对员工进行排序,然后使用 print_r() 输出排序后的数组。

输入格式:一行,包含一个以员工姓名为键、薪水为值的 JSON 对象(示例:{"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})

预期输出:按薪水值从高到低排序的关联数组,使用 print_r() 显示

亲手试试

<?php
// 读取输入
$input = fgets(STDIN);

// 将 JSON 转换为关联数组
$employees = (array)json_decode($input, true);

// TODO:在下方编写代码,按薪资从高到低对数组排序


// 输出排序后的数组
print_r($employees);
?>
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: PHP 在线编译器