当前位置: 首页 > 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面试题…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...