当前位置:首页 > PHP

php排序的实现

2026-02-16 15:04:08PHP

数组排序函数

PHP提供了多种内置函数用于数组排序,适用于不同场景:

  • sort():对数组升序排序(值重排,键重置为数字索引)
  • rsort():对数组降序排序
  • asort():保持键值关联的升序排序
  • arsort():保持键值关联的降序排序
  • ksort():按键名升序排序
  • krsort():按键名降序排序
$numbers = [3, 1, 4];
sort($numbers); // 结果: [1, 3, 4]

自定义排序

使用usort()uasort()uksort()实现自定义排序逻辑,需提供比较函数:

function compareLength($a, $b) {
    return strlen($a) - strlen($b);
}

$words = ["apple", "banana", "cherry"];
usort($words, "compareLength"); 
// 结果: ["apple", "cherry", "banana"]

多维度数组排序

对多维数组排序可通过自定义比较函数实现:

$users = [
    ['name' => 'Alice', 'age' => 25],
    ['name' => 'Bob', 'age' => 30]
];

usort($users, function($a, $b) {
    return $a['age'] <=> $b['age'];
});

自然排序

natsort()实现自然顺序排序(如:img1, img2, img10):

$files = ["img12", "img10"];
natsort($files); // 结果: ["img10", "img12"]

对象排序

使用usort()配合对象属性比较:

class User {
    public $age;
}

$users = [new User(25), new User(30)];
usort($users, fn($a, $b) => $a->age <=> $b->age);

稳定排序实现

PHP原生排序非稳定,可通过保留原索引实现稳定排序:

function stableSort($array, $cmp) {
    $indexed = array_map(fn($v, $i) => [$v, $i], $array, array_keys($array));
    usort($indexed, fn($a, $b) => $cmp($a[0], $b[0]) ?: $a[1] <=> $b[1]);
    return array_column($indexed, 0);
}

性能注意事项

  • 大数组推荐使用SplHeapSplPriorityQueue
  • 排序前考虑是否需要保留原数组键值关系
  • 复杂排序条件可结合array_multisort()实现

php排序的实现

标签: php
分享给朋友:

相关文章

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HT…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $imag…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…