Menu
CoddyTech

使用 'usort' 自定义排序

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

当 PHP 内置的排序函数无法满足你的特定需求时,usort() 函数可以提供最大的灵活性,让你准确地定义如何比较和排列元素。这个函数接收你的数组和一个自定义比较函数,你可以编写这个函数来确定排序逻辑。

比较函数会接收数组中的两个元素,并且必须返回一个整数:如果第一个元素应排在第二个元素之前,则返回负数;如果两者相等,则返回零;如果第一个元素应排在第二个元素之后,则返回正数。

<?php
function compareByLength($a, $b) {
    return strlen($a) - strlen($b);
}

$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// 输出:Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>

在这个示例中,比较函数会计算字符串长度之差。当 strlen($a) - strlen($b) 返回负数时,表示第一个字符串较短,应排在排序后的数组前面。

和其他 PHP 排序函数一样,usort() 会直接修改原数组。这个强大的函数让你可以按任何能想到的条件排序,无论是字符串长度、自定义业务逻辑,还是复杂的多字段比较。

challenge icon

挑战

简单

你会收到一个输入:一个 JSON 格式的产品价格数组。读取输入,将 JSON 字符串转换为数组,创建一个按价格升序排序的比较函数,使用 usort() 和你的比较函数对数组排序,然后使用 print_r() 输出排序后的数组。

输入格式:一行,其中包含一个由数字组成的 JSON 数组(示例:[29.99,15.50,42.00,8.75,33.25])

预期输出:按价格升序排列的数组,使用 print_r() 显示

亲手试试

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

// TODO:创建一个比较函数,并使用 usort() 对数组排序

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

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

逻辑与流程中的所有课

自己练习: PHP 在线编译器