首页 > 编程语言 >php多维数组自定义排序 uasort()

php多维数组自定义排序 uasort()

时间:2023-08-07 19:13:53浏览次数:41  
标签:排序 sortnumber 自定义 数组 uasort array php

对数组进行排序

PHP 有一些用来排序数组的函数, 这个文档会把它们列出来。

主要区别有:

  • 有些函数基于 array 的键来排序, 而其他的基于值来排序的:$array['key'] = 'value';。
  • 排序之后键和值之间的关联关系是否能够保持, 是指排序之后数组的键可能 会被重置为数字型的(0,1,2 ...)。
  • 排序的顺序有:字母表顺序, 由低到高(升序), 由高到低(降序),数字排序,自然排序,随机顺序或者用户自定义排序。
  • 注意:下列的所有排序函数都是直接作用于数组本身, 而不是返回一个新的有序的数组。
  • 以下函数对于数组中相等的元素,它们在排序后的顺序是未定义的。 (也即相等元素之间的顺序是不稳定的)。
函数名称 排序依据 数组索引键保持 排序的顺序 相关函数
array_multisort() 键值关联的保持,数字类型的不保持 第一个数组或者由选项指定 array_walk()
asort() 由低到高 arsort()
arsort() 由高到低 asort()
krsort() 由高到低 ksort()
ksort() 由低到高 asort()
natcasesort() 自然排序,大小写不敏感 natsort()
natsort() 自然排序 natcasesort()
rsort() 由高到低 sort()
shuffle() 随机 array_rand()
sort() 由高到低 rsort()
uasort() 由用户定义 uksort()
uksort() 由用户定义 uasort()
usort() 由用户定义 uasort()

uasort主要是用在需要按照自定义的方法并且保留索引关系对多维数组的排序上;

有如下数组

$sort_array = array(
    "array1" => array(
        'word' => 'test1',
        'sortnumber' => 1,
        ),
    'array3' => array(
            'word' => 'test4',
            'sortnumber' => 4,
            ),
    'array2' => array(
        'word' => 'test3',
        'sortnumber' => 3,
        ),
    'array5' => array(
        'word' => 'test5',
        ),
    'array4' => array(
        'word' => 'test2',
        'sortnumber' => 2,
        ),
    );

需求是按照sortnumber以升序的方式排序;
首先需要写一个自定义排序的规则;

// 自定义排序函数
functionmy_sort($a, $b)
{
    $prev = isset($a['sortnumber']) ? $a['sortnumber'] : 0;
    $next = isset($b['sortnumber']) ? $b['sortnumber'] : 0;
    if ($prev == $next) return 0;
    return ($prev < $next) ? -1 : 1;
}
echo '排序前:';
print_r($sort_array);
uasort($sort_array, "my_sort");
echo "排序后:";
print_r($sort_array);

最后需要提醒的是:自定义的函数要使用isset检测下需要排序的字段是否存在如不存在赋个默认的0;

标签:排序,sortnumber,自定义,数组,uasort,array,php
From: https://www.cnblogs.com/fuqian/p/17612470.html

相关文章

  • php中计算二维数组中某一元素之和
    [0] => array(5){    ["id"] => string(2) "11"    ["name"] => string(5) "1.jpg"    ["suffix"] => string(3) "jpg"    ["url"] => string(29) "./Uploads/1/5292f55d208e......
  • 支持多数据源联合查询的SQL运行引擎sycnany-SQL添加使用自定义函数
    在微服务和云原生愈发流行的今天,数据的分布也愈发脱离单库单机而更加复杂,使用的数据库类型也会更多,但业务的复杂依然会带来了大量的数据查询和导出需求,而很多时候我们很难为数据量的大部分系统创建完整的BI数仓系统,这时候你是不是觉得为这些需求查询和导出数据就会是一个十分困难且......
  • 如何自定义书写中间件?
    一、什么是中间件?中间件是一种装配到应用管道以处理请求和响应的软件。是介于request与response处理过程之间的一个插件(一道处理过程),相对比较轻量级,并且在全局上会影响到request对象和response对象的属性。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。每个组件:1、选......
  • 静态编译 PHP 8 系列、PHP7.4 、PHP7.3
    静态编译PHP运行时文档说明:只记录关键的地方;发布时间:2023-08-07备注:macos环境下不需要启动容器环境,直接构建即可PHP原生构建选项文档php7.4、7.3分支需要单独克隆(区别:openss使用v1版本,curl库不启用http2库http3库)复用swoole-cli编写......
  • php://input输入流详解
    php://input输入流详解对于php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述。php://inputallowsyoutoreadrawPOSTdata.Itisalessmemoryintensivealternativeto$HTTP\_RAW\_POST_DATAanddoesnotneedanyspecialphp.inidirectives.php://in......
  • php 规范的注释
    /** * @name 名字 * @abstract 申明变量/类/方法 * @access 指明这个变量、类、函数/方法的存取权限 * @author 函数作者的名字和邮箱地址 * @category  组织packages * @copyright 指明版权信息 * @const 指明常量 * @deprecate 指明不推荐或者......
  • 【我和openGauss的故事】带有out参数的存储过程及自定义函数的重载测试
    【我和openGauss的故事】带有out参数的存储过程及自定义函数的重载测试DarkAthenaopenGauss2023-08-0418:01发表于四川背景先说下数据库里说的函数重载是什么。比如我们知道数据库可能会有同名的函数,但是函数的参数声明不一样selectto_char(sysdate,'yyyymmdd')fromdual;se......
  • 基于php的奶茶原材料交易系统
    随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。奶茶原材料交易系统主要的功能模块包括工作提醒、产品广告、产品分类、产品管理、订单管理、留言管理、会员管理、管理员管理、友情链接、系统设置等功能。系统中管理员......
  • Zig 自定义字符类型
    Zig自定义字符类型在Zig​中整数型有无符号Unsigned​有符号Signed​在默认情况下生命的整数型变量都是有符号的类型。长度有符号类型无符号类型8位​i8​​u8​16位​i16​​u16​32位​i32​​u32​64位​i64​​u64​128位​i128......
  • FreeSWITCH添加自定义endpoint之媒体交互
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9 之前写过FreeSWITCH添加自定义endpoint的文章:https://www.cnblogs.com/MikeZhang/p/fsAddEndpoint20230528.html今天记录下endpoint媒体交互的过程并提供示例代码及相关资源下载,本文涉及示例代码和资源可从如下渠道获取:关......