当前位置: 首页 > news >正文

php 多维数组排序,根据某一列排序(array_multisort()和array_column()联用)

array_multisort()和array_column()联用效果直接叠满,1+1>100

先来看下两个函数的介绍和用法

array_column():

 一般模式,不需要其中字段作为id,只需要提取val值

<?php
// 可能从数据库中返回数组
$a = [['id' => 5698,    	'first_name' => 'Peter',    'last_name' => 'Griffin',  ],  [    'id' => 4767,    'first_name' => 'Ben', 'last_name' => 'Smith',  ],  [    'id' => 3809,    'first_name' => 'Joe',   'last_name' => 'Doe',  ],];
$last_names = array_column($a, 'last_name');
print_r($last_names);//最简单模式
/*
Array(  [0] => Griffin  [1] => Smith  [2] => Doe
)
*/
?>

 升级模式,需要其中字段作为id,另一字段作为val值

<?php
// 可能从数据库中返回数组
$a = [['id' => 5698,    	'first_name' => 'Peter',    'last_name' => 'Griffin',  ],  [    'id' => 4767,    'first_name' => 'Ben', 'last_name' => 'Smith',  ],  [    'id' => 3809,    'first_name' => 'Joe',   'last_name' => 'Doe',  ],];
$last_names = array_column($a, 'last_name' ,'id');
print_r($last_names);//id作为key,last_name作为val
/*
Array(  [5698] => Griffin  [4767] => Smith  [3809] => Doe)
*/

 array_multisort():

 返回一个升序排列的数组:

<?php
$a1=array("Dog","Cat");
$a2=array("Fido","Missy");
array_multisort($a1,$a2);
print_r($a1);
print_r($a2);
/*返回结果
Array ( [0] => Cat [1] => Dog ) Array ( [0] => Missy [1] => Fido )
*/
?>

当两个值相同时如何排序:

<?php
$a1=array("Dog","Dog","Cat");
$a2=array("Pluto","Fido","Missy");
array_multisort($a1,$a2);
print_r($a1);
print_r($a2);
/*返回结果
Array ( 
[0] => Cat 
[1] => Dog 
[2] => Dog 
) 
Array ( 
[0] => Missy 
[1] => 
Fido [2] => Pluto 
)
*/
?>

使用排序参数:

<?php
$a1=array("Dog","Dog","Cat");
$a2=array("Pluto","Fido","Missy");
array_multisort($a1,SORT_ASC,$a2,SORT_DESC);
print_r($a1);
print_r($a2);
/*返回结果
Array ( 
[0] => Cat 
[1] => Dog 
[2] => Dog 
) 
Array ( 
[0] => Missy 
[1] => Pluto
[2] => Fido 
)
*/
?>

合并两个数组,并按数字降序排列:

<?php
$a1=array(1,30,15,7,25);
$a2=array(4,30,20,41,66);
$num=array_merge($a1,$a2);
array_multisort($num,SORT_DESC,SORT_NUMERIC);
print_r($num);
/*返回结果
Array ( 
[0] => 66 
[1] => 41
[2] => 30 
[3] => 30 
[4] => 25 
[5] => 20 
[6] => 15
[7] => 7 
[8] => 4 
[9] => 1 
)
*/
?>

以上是对两个函数的介绍和使用方法举例

下面开始合体进化,直接直呼我滴个*:

首先扩展下array_multisort(),如果对多个数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列

<?php
$a1 = ['c', 'b', 'a'];
$a2 = ['b', 'c', 'a'];
$a3 = ['b', 'a', 'c'];array_multisort($a1,$a2,$a3);
print_r($a1);print_r('<br>');
print_r($a2);print_r('<br>');
print_r($a3);print_r('<br>');
/*输出结果
Array ( [0] => a [1] => b [2] => c )
Array ( [0] => a [1] => c [2] => b )
Array ( [0] => c [1] => a [2] => b )
*/
?>

然后开始合体:

1.将多维数组按照某一列的字段来进行排序

<?php
$data[] = array('volume' => 67, 'id' => 2);
$data[] = array('volume' => 86, 'id' => 1);
$data[] = array('volume' => 86, 'id' => 3);
$data[] = array('volume' => 85, 'id' => 6);
$data[] = array('volume' => 98, 'id' => 2);
$data[] = array('volume' => 86, 'id' => 6);
$data[] = array('volume' => 67, 'id' => 7);array_multisort(array_column($data, 'volume'), SORT_DESC,$data);//按volume倒序排/*输出结果
array(7) { 
[0]=> array(2) { 
["volume"]=> int(98) ["id"]=> int(2) 
} 
[1]=> array(2) {["volume"]=> int(86) ["id"]=> int(1)
} 
[2]=> array(2) { 
["volume"]=> int(86) ["id"]=> int(3)} 
[3]=> array(2) {["volume"]=> int(86) ["id"]=> int(6)} 
[4]=> array(2) {["volume"]=> int(85) ["id"]=> int(6) 
} 
[5]=> array(2) {["volume"]=> int(67) ["id"]=> int(2)} 
[6]=> array(2) { 
["volume"]=> int(67) ["id"]=> int(7) 
} 
}
*/
?>

2.按volume倒序排,volume相同时,按id正序排

<?php
$data[] = array('volume' => 67, 'id' => 2);
$data[] = array('volume' => 86, 'id' => 1);
$data[] = array('volume' => 86, 'id' => 3);
$data[] = array('volume' => 85, 'id' => 6);
$data[] = array('volume' => 98, 'id' => 2);
$data[] = array('volume' => 86, 'id' => 6);
$data[] = array('volume' => 67, 'id' => 7);array_multisort(array_column($data,'volume'), SORT_DESC, array_column($data,'id'), SORT_ASC, $data);//按volume倒序排,volume相同时,按id正序排/*输出结果
array(7) { 
[0]=> array(2) 
{ 
["volume"]=> int(98) ["id"]=> int(2) 
} 
[1]=> array(2) {["volume"]=> int(86) ["id"]=> int(1) 
} 
[2]=> array(2) { 
["volume"]=> int(86) ["id"]=> int(3)} 
[3]=> array(2) { 
["volume"]=> int(86) ["id"]=> int(6) 
} 
[4]=> array(2) {["volume"]=> int(85) ["id"]=> int(6) 
} 
[5]=> array(2) { ["volume"]=> int(67) ["id"]=> int(2) 
} 
[6]=> array(2) { ["volume"]=> int(67) ["id"]=> int(7) 
} 
}
*/
?>

3.按照年龄从大到小的顺序排列,如果年龄相同就按照名字升序排序

<?php$array = [["age" => 20, "name" => "a"],["age" => 21, "name" => "d"],["age" => 22, "name" => "e"],["age" => 20, "name" => "b"],["age" => 25, "name" => "c"]];array_multisort(array_column($array,'age'),SORT_NUMERIC,SORT_DESC,array_column($array,'name'),SORT_STRING,SORT_ASC,$array);
print_r($array);
/*返回结果
Array
([0] => Array([age] => 25[name] => c)[1] => Array([age] => 22[name] => e)[2] => Array([age] => 21[name] => d)[3] => Array([age] => 20[name] => a)[4] => Array([age] => 20[name] => b)
)
*/
?>

到此撒花.

相关文章:

php 多维数组排序,根据某一列排序(array_multisort()和array_column()联用)

array_multisort()和array_column()联用效果直接叠满,11>100 先来看下两个函数的介绍和用法 array_column(): 一般模式,不需要其中字段作为id,只需要提取val值 <?php // 可能从数据库中返回数组 $a [[id > 5698, first_name > Peter, last_name > G…...

框架分析(5)-Django

框架分析&#xff08;5&#xff09;-Django 专栏介绍Django核心概念以及组件讲解模型&#xff08;Model&#xff09;视图&#xff08;View&#xff09;模板&#xff08;Template&#xff09;路由&#xff08;URLconf&#xff09;表单&#xff08;Form&#xff09;后台管理&…...

常见前端面试之VUE面试题汇总七

20. 对 vue 设计原则的理解 1.渐进式 JavaScript 框架&#xff1a;与其它大型框架不同的是&#xff0c;Vue 被设计 为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上 手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的…...

空时自适应处理用于机载雷达——空时处理基础知识(Matla代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

磁盘阵列/视频集中存储/安防监控视频智能分析平台新功能:安全帽/反光衣/安全带AI识别详解

人工智能技术已经越来越多地融入到视频监控领域中&#xff0c;近期我们也发布了基于AI智能视频云存储/安防监控视频AI智能分析平台的众多新功能&#xff0c;该平台内置多种AI算法&#xff0c;可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍&#xff0c;支持口罩佩戴检…...

23款奔驰GLE450轿跑升级原厂外观暗夜套件,战斗感满满的

升级的方案基本都是替换原来车身部位的镀铬件&#xff0c;可能会有人问&#xff1a;“难道直接用改色膜贴黑不好吗&#xff1f;”如果是贴膜的话&#xff0c;第一个是颜色没有那么纯正&#xff0c;这些镀铬件贴黑的技术难度先抛开不说&#xff0c;即使贴上去了&#xff0c;那过…...

win10系统rust串口通信实现

一、用cargo创建新工程 命令&#xff1a;cargo new comport use std::env; use std::{thread, time}; use serialport::{DataBits, StopBits, Parity, FlowControl}; use std::io::{self, Read, Write}; use std::time::Duration;fn main() -> io::Result<()> {let m…...

新生代与老年代

在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;内存被划分为多个不同的区域&#xff0c;其中包括新生代&#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;。 新生代是用于存储新创建的对象的区域。大多数对象在创建后很快就变…...

Microsoft正在将Python引入Excel

Excel和Python这两个世界正在碰撞&#xff0c;这要归功于Microsoft的新集成&#xff0c;以促进数据分析和可视化 Microsoft正在将流行的编程语言Python引入Excel。该功能的公共预览版现已推出&#xff0c;允许Excel用户操作和分析来自Python的数据。 “您可以使用 Python 绘图…...

知识速递(六)|ChIP-seq分析要点集锦

书接上文组学知识速递&#xff08;五&#xff09;|ChIP-seq知多少&#xff1f;&#xff0c;当我们实验完成&#xff0c;拿到下机数据之后&#xff0c;我们最关心的就是&#xff0c;这个数据能不能用&#xff1f;所谓数据能不能用&#xff0c;其实我们会重点关注以下问题&#x…...

【附安装包】EViews 13.0安装教程|计量经济学|数据处理|建模分析

软件下载 软件&#xff1a;EViews版本&#xff1a;13.0语言&#xff1a;英文大小&#xff1a;369.46M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.com…...

Java 语言实现快速排序算法

【引言】 快速排序算法是一种常用且高效的排序算法。它通过选择一个基准元素&#xff0c;并将数组分割成两个子数组&#xff0c;一边存放比基准元素小的元素&#xff0c;另一边存放比基准元素大的元素。然后递归地对这两个子数组进行排序&#xff0c;最终达到整个数组有序的目的…...

Config: Git 环境搭建

...

最新AI系统ChatGPT网站程序源码/搭建教程/支持GPT4.0/Dall-E2绘画/支持MJ以图生图/H5端/自定义训练知识库

一、正文 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…...

leetcode 392. 判断子序列

2023.8.25 本题要判断子序列&#xff0c;可以使用动态规划来做&#xff0c;定义一个二维dp数组。 接下来就是常规的动态规划求解子序列的过程。 给出两种定义dp数组的方法。 二维bool型dp数组&#xff1a; class Solution { public:bool isSubsequence(string s, string t) …...

课程项目设计--spring security--认证管理功能--宿舍管理系统--springboot后端

写在前面&#xff1a; 还要实习&#xff0c;每次时间好少呀&#xff0c;进度会比较慢一点 本文主要实现是用户管理相关功能。 前文项目建立 文章目录 验证码功能验证码配置验证码生成工具类添加依赖功能测试编写controller接口启动项目 security配置拦截器配置验证码拦截器 …...

【算法日志】动态规划刷题:完全背包应用问题(day39)

代码随想录刷题60Day 目录 前言 零钱兑换 完全平方数 前言 今天重点是对完全背包问题进一步了解&#xff0c;难度不大&#xff0c;重点是区分与其他背包问题在初始和遍历上的一些细节。 零钱兑换 int coinChange(vector<int>& coins, int amount) {if (!amount)re…...

基于Python的图书馆大数据可视化分析系统设计与实现【源码+论文+演示视频+包运行成功】

博主介绍&#xff1a;✌csdn特邀作者、博客专家、java领域优质创作者、博客之星&#xff0c;擅长Java、微信小程序、Python、Android等技术&#xff0c;专注于Java、Python等技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; …...

cmake 交叉编译应用程序:手动设置链接脚本

前言 在使用 cmake 交叉编译应该应用程序时&#xff0c;好像没有手动设置【链接脚本】&#xff0c;也能正常构建生成 Makefile&#xff0c;并且可以正常 Make 生成需要的 应用程序。 但是有些应用程序&#xff0c;需要手动指定【链接脚本】&#xff0c;比如修改链接地址&#…...

深入探讨Eureka的三级缓存架构与缓存运行原理

推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 史上最全文档AI绘画stablediffusion资料分享 AI绘画关于SD,GPT,SDXL等个人总结文档 资源分享 「java、python面试题…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...