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

news2025/1/13 15:51:29

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
        )
)
*/
?>

到此撒花.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/927172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AndroidStudio】屏蔽小米打印

使用小米手机调试时&#xff0c;会一直有notifyQueue load error的打印 在过滤器重添加过滤条件即可 -message:notifyQueue

ISO-16750-1,2,3,4,5_2023 道路车辆 — 电气和电子设备的环境条件和测试 ,标准汇总

目录 一、ISO 16750标准各Part部分当前状态&#xff1a; ISO 16750-2023 合集1-5包下载&#xff1a;https://download.csdn.net/download/std7879/88251235 二、ISO 16750标准各Part部分描述的内容&#xff1a; ISO 16750-1:2023Part 1: General概述 ISO 16750-2:2023 Part…

8路模拟信号采集FMC子卡模块推荐哪些?

FMC168是一款基于VITA57.4标准的2GSPS/2.6GSPS/3GSPS采样率14位分辨率Double FMC子卡模块&#xff0c;该模块可以实现8路14-bit、2GSPS/2.6GSPS/3GSPS采样率模拟信号采集。该板卡ADC器件采用ADI公司的AD9208芯片,该芯片与AD9689完全兼容&#xff0c;可以实现不同的采样率范围。…

微信小程序客服系统-两种形式:嵌入页面传递更多信息 与 自带组件形式

微信小程序对接有两种方式&#xff1a;webview组件嵌入页面&#xff0c;小程序客服组件对接消息 使用webview组件嵌入聊天页面形式。这种形式更加的灵活可控&#xff0c;可以传递更多的信息给到客服&#xff0c;例如可以把用户的手机号&#xff0c;所在页面的产品信息等带入进来…

Dubbo3之SerializingExecutor

前言 Dubbo3 提供了一个挺有意思的 Executor&#xff0c;用来将提交到线程池里的任务按顺序串行执行。 需求背景&#xff1a;你有一个线程池&#xff0c;但是你不想修改它&#xff0c;现在你的需求是要把提交上去的任务按顺序串行执行。 在这样一个需求背景下&#xff0c;Ser…

Text-to-SQL小白入门(三)IRNet:引入中间表示SemQL

摘要 本文主要介绍了IRNet论文的基本信息&#xff0c;比如标题、摘要、数据集、结果&结论&#xff0c;以及论文中提出的不匹配问题和词汇问题以及对应的解决方案&#xff0c;重点学习了中间表示SemQL。 引言 学习论文时&#xff0c;可以先粗略看看论文标题-摘要-数据集-结…

YB2411是一款内部集成有高边高压功率MOSFET管的高频率(2MHz)降压型开关稳压器。

概述&#xff1a; YB2411是一款内部集成有高边高压功率MOSFET管的高频率(2MHz)降压型开 关稳压器。提供单路最大0.6A高效率输出&#xff0c;以电流模式控制方式达到快速环路响 应。 宽范围输入电压(33V至36V)可在移动环境输入的条件下实现各种降压型电 源变换的应用。1uA的…

为什么产品经理不适合做项目经理呢?

虽然产品经理需要具备一定的项目能力&#xff0c;但在实际执行过程中&#xff0c;通常会在开发团队中设置一个类似项目经理的角色&#xff0c;负责把控项目进度和质量。一般情况下&#xff0c;技术经理就是项目经理。 技术型项目经理的特点如下&#xff1a; 充当救火队员的角…

C#矩阵XY排序

矩阵XY快速排序 using MyVision.Script.Method;public class MyScript : ScriptMethods {//struct MOTIONPOSXY_S{public double Pos_x;public double Pos_y;};//脚本执行该方法public bool Process(){//try{//脚本代码写在下方 List<double> PointX GetDoubleList(&qu…

会员管理系统实战开发教程03-会员管理功能

我们上篇介绍了会员管理的列表页&#xff0c;及新增功能开发。本篇我们继续我们的会员管理功能&#xff0c;介绍一下详情、修改、删除功能。 1 创建详情页 打开控制台&#xff0c;点击创建页面的图标&#xff0c;创建详情页 2 数据详情组件 详情页我们也是使用数据容器组…

RTSP/Onvif视频服务器EasyNVR视频平台微信端出现播放失败的问题解决方案

EasyNVR是基于RTSP/Onvif协议接入的视频平台&#xff0c;具备视频直播监控、录像、检索与回看、存储、国标级联等视频能力&#xff0c;可支持将接入的视频流进行全平台、全终端的分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。 有用户反馈&#xff0c;在…

shopee平台好做吗,有什么优势?

shopee平台提供了一个庞大而活跃的用户群体。作为东南亚地区最受欢迎的购物平台之一&#xff0c;shopee平台吸引了数百万用户每天在该平台上进行交易。这意味着商家可以通过shopee平台获得更大范围和更广泛的曝光机会。无论是刚创业还是已经有一定规模和知名度的企业&#xff0…

最简单的Obsidian图床配置

参考文章&#xff1a; Obsidian 将图片批量上传至图床 Obsidian中图床自动上传设置 前言 配置图床的目的&#xff1a;解决 Obsidian 图片存储问题&#xff0c;一般来说 Obsidian 图片是以本地链接的方式存储在文章当中&#xff0c;当图片移动的时候文章中的图片就会出错。 …

翻倍以链表形式表示的数字

题目&#xff1a; 示例&#xff1a; 思路&#xff1a; 有点相似于&#xff1a;链表相加II&#xff0c;这道题我们仍然有进位&#xff0c;但不同的是&#xff0c;链表相加我们选择了开辟新节点&#xff0c;这道题我们选择反转两次链表&#xff0c;开始一次&#xff0c;结束一次…

能够解决问题的客服电话系统方案

客服电话的应用场景通常是以呼入的电话为主&#xff0c;属于服务性质的更重视服务质量&#xff0c;客服电话方案主要解决呼叫中心运营中的一些问题&#xff0c;下面就来详细了解下。 企业的客服电话通常都是统一的一个热线号码&#xff0c;如&#xff1a;400电话、800电话、95号…

若依Cloud集成Flowable6.7.2

项目简介 基于若依Cloud的Jove-Fast微服务项目&#xff0c;集成工作流flowable(接上篇文章) 若依Cloud集成积木报表 项目地址&#xff1a;https://gitee.com/wxjstudy/jove-fast 后端 新建模块 目录结构如下: 引入依赖 前提:引入依赖之前先配置好maven的setting.xml &…

基于SpringBoot和Vue的前后端分离项目(高校毕业生信息管理平台)

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于SpringBoot和Vue的前后端分离项目&#xff08;高校…

OceanMind海睿思签约常州市建筑科学研究院,打造检验检测行业数字化转型标杆

近日&#xff0c;中新赛克海睿思 与 中国知名综合性建筑研究和科技创新型高科技企业——常州市建筑科学研究院集团股份有限公司&#xff08;以下简称“建科股份”&#xff09;达成深度战略合作&#xff0c;为建科股份提供行业领先的数据工程建设服务&#xff0c;携手推进检验检…

视频云存储/安防监控视频AI智能分析网关V3:抽烟/打电话功能详解

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

助力工业物联网,工业大数据之服务域:可视化工具Grafana介绍【三十八】

文章目录 前言08&#xff1a;可视化工具Grafana介绍09&#xff1a;可视化工具Grafana部署10&#xff1a;Grafana集成Prometheus11&#xff1a;Grafana集成MySQL监控 前言 项目所需工具: 链接&#xff1a;https://pan.baidu.com/s/1sIa8nninf2Fz6YqE3vUpqQ?pwd5wr3 提取码&…