首页 >  编程教程 >  PHP教程 >  正文

php将多维数组根据某个键倒序/升序

 作者:潘某人SEO
2075

数组的排序是我们经常会使用的到的,一维数组可以用一个简单的krsort() 函数进行升序排列,或者使用 arsort() 函数进行降序排列 。但是如何是多维数组那么情况就会复杂很多,没有可以直接实现多维数组按照某个键值进行排序的函数。

$data =[
    ['name'=>'张三','sex'=>'男','age'=>'66'],
    ['name'=>'潘某人SEO','sex'=>'男','age'=>'18'],
    ['name'=>'小红','sex'=>'女','age'=>'40'],
]

如上数组,我们如何按照年龄进行升序排列呢,基本的思路就是以键值“age”为基础进行升序。我们可以使用array_multisort()函数和array_column() 函数组合使用就可以达到这个效果。

array_multisort()函数

语法:array_column(array,column_key,index_key);

    array---必需,规定要使用的多维数组

    column_key---必需,需要返回值的列

    index_key---可选。用作返回数组的索引/键的列。

可以实现的功能是返回输入数组中某个单一列的值。就拿上面的数组$data为列子,array_column($data,age)的结果如下所示。

$data =[
    ‘age'=>'66',
    'age'=>'18',
    'age'=>'40'
]

array_multisort()函数

array_multisort()是数组排序函数,可以对多个PHP数组进行排序,排序结果是所有的数组都按第一个数组的顺序进行排列,多个数组排序的键与第一个排列好的数组对应。

语法:array_multisort(array1,sorting order,sorting type,array2,array3...)

    array1---必需,规定数组。

    sorting order---可选,规定排列顺序。可能的值:SORT_ASC - 默认,按升序排列 (A-Z);SORT_DESC - 按降序排列 (Z-A)。

    sorting type---可选,规定排序类型。可能的值:

        SORT_REGULAR - 默认。把每一项按常规顺序排列(Standard ASCII,不改变类型)。

        SORT_NUMERIC - 把每一项作为数字来处理。

        SORT_STRING - 把每一项作为字符串来处理。

        SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。

        SORT_NATURAL - 把每一项作为字符串来处理,使用类似 natsort() 的自然排序。

        SORT_FLAG_CASE - 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写。

array2,array3等等---可选,规定数组。


多维数组排序:array_multisort(array_column($data,age),SORT_ASC,$data),运行结果如下:

$data =[
    ['name'=>'潘某人SEO','sex'=>'男','age'=>'18'],
    ['name'=>'小红','sex'=>'女','age'=>'40'],
    ['name'=>'张三','sex'=>'男','age'=>'66']
]

运行逻辑就是参数array1=array_column($data,age),SORT_ASC代表升序,会把array1数组进行一个升序排列,实际操作上就是把第一行数据放到最后一列;array_multisort()函数就会把SORT_ASC代表升序操作对array1所作的操作,同等的对待array2,array3等数组。

基于这个原理,所有规定数组必须和array1的元素个数必须相同,所以我们array1是通过array_column()对数组进行了降维打击,元素个数完全都是相同的,并且sex键值位置的顺序都是相同的,也就是说对简化后的一维数组进行升序就可以同步的对多维数组进行升序操作,妙不可言。

申明:本站内容仅代表个人观点,仅供学习参考;未经授权任何个人或组织单位不得复制、转载、摘编以及其它形式的应用! 本站文章可能使用到互联网上的资料,若对您造成困扰,请联系 kk19@foxmail.com除理 本文地址:https://www.chateach.com/it/php/651
相关文章
  • Laravel邮件发送功能的实现例子

    Laravel邮件发送

    Laravel如何发送邮件呢?Laravel邮件发送功能的实现例子,从邮箱注册配置到,laravel邮件参数配置,提供纯文本邮件和富文本邮件发送两种邮件发送实例。

    1572
    • Laravel邮件发送
  • Vue 中使用 localStorage 详解

    localStorage,Vue

    什么是localStorage,与cookie的区别是什么,localStorage的生存期、数据结构、域名限制、浏览器支持;localStorage常用方法,存储数据setItem、读取数据getItem、修改数据、删除数据。

    1285
    • localStorage
    • Vue
  • 手把手教你建立一个自己的网站

    零基础建站

    本站的主要的是分享自己建站过程中遇到的各种问题和解决方案,适合没有任何基础但是想要建立自己的一个网站的朋友,其实如果想要简单的入门让一个网站跑起来是非常的简单的。如果说是采用wordpress等CMS系统来搭建一个网站的话就更加简单了。进本上只要动手能力自学能力强一点,基本上几个小时就可以让一个站点运行起来。

    1544
    • 零基础建站
  • 网站本地服务器搭建

    centos系统安装

    网站搭建第一步本地服务器的架设centos系统安装,对于刚接触网站编程的小伙伴不要先急着去购买服务器,当然土豪请随意。我们可以现在自己电脑上本地搭建一个虚拟服务器环境来运行,可以检测下自己是不是真的能力去搭建一个网站。

    933
    • centos系统安装
  • 原生js 复制内容到剪切板代码实现

    js 复制内容,剪切板代

    有时候为了提升用户体验,比如在某些页面需要实现点击内容,将内容复制到剪切板,可以提升用户复制内容的操作效率;因此在实际操作中通过一定的事件触发复制功能是非常有意义的行为,下面是两种通过原生js实现复制内容到剪切板。

    1086
    • js 复制内容
    • 剪切板代
  • HTML marquee标签如何制作滚动文字

    marquee标签,滚动文字

    在HTML页面中可以使用marquee标签实现页面文字滚动效果,给大家分享的是有关HTML代码如何制作滚动文字的内容。HTML技术中使文字滚动的方法是使用双标签marquee。

    981
    • marquee标签
    • 滚动文字
  • lnmp环境简介

    lnmp环境简介

    LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。

    1280
    • lnmp环境简介
  • centos下修改ssh端口

    ssh端口,

    服务器如何修改默认的ssh端口,修改ssh默认端口是非常有必要的可以保证登陆的安全性。

    1175
    • ssh端口
  • springBoot之Thymeleaf常见语法

    springBoot,Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。它与 JSP,Velocity,FreeMaker 等模板引擎类似,也可以轻易地与 Spring MVC 等 Web 框架集成。

    1154
    • springBoot
    • Thymeleaf
  • 如何解决Vue中mounted不能获取到data

    mounted获取data

    Vue中使用mounted时,无法获取到data的原因是,this无法指向data中的数据。在mounted生命周期中this指向的是window对象而不是Vue对象,所以真正找的是window对象下的data,但是window下没有data,所以就报错了。

    1655
    • mounted获取data
  • Vue中基于$event实现click事件获取html元素和css样式

    click事件,$event

    Vue中实现单击click事件获取html元素和css样式的解决方法,$event是一个对象 $event是指当前触发的是什么事件(鼠标事件,键盘事件等) $event.target则指的是事件触发的目标,即哪一个元素触发了事件,这将直接获取该dom元素。

    937
    • click事件
    • $event
  • html网页如何禁止打印页面

    禁止打印页面

    html网页如何禁止打印页面方式,可以禁止打印键盘的快捷键组合,但是用户可以直接鼠标操作浏览器来实现打印;所以通过css来屏蔽打印内容的输出更加的合理有效,代码如下所示。

    1549
    • 禁止打印页面
  • Laravel的简介及其安装方法

    Laravel安装方法

    linux下使用composer的方式安装laravel 9.x版本的方法,及laravel的简介,Laravel是一套简洁、优雅的PHP Web开发框架,它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。具有了一套高级的PHP ActiveRecord实现 -- Eloquent ORM。

    1020
    • Laravel安装方法
  • laravel下数据密码正确但还是无法连接

    laravel数据库链接

    使用laravel框架的时候,数据的密码确认是正确的但是就是无法连接成功数据库。出现这种情况往往并不是数据库的配置或者密码等参数存在问题,其实你只是少了非常关键的一步清空配置缓存。

    1215
    • laravel数据库链接
  • JavaScript == 与 === 区别

    == 与 === 区别

    js中==和===的区别 ==和===的区别和一些比较规则: == 在比较类型不同的变量时,会进行数据类型转化,将二者转换成数据类型相同的变量,再进行比较。对于 string、number 等基础类型,== 和 === 是有区别的 a)不同类型间比较,== 之比较 "转化成同一类型后的值" 看 "值" 是否相等,=== 如果类型不同,其结果就是不等。

    768
    • == 与 === 区别
  • MySQL常用查询语句大全

    Mysql查询语句

    MySQL常用的查询语句大全看这里,值得收藏。MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Sun公司又被Oracle公司收购,因此MySQL目前属于 Oracle 旗下产品。

    895
    • Mysql查询语句
  • laravel定义全局常量的方法

    laravel全局常量

    在 Laravel项目中有时我们会需要一些全局函数和常量,那么在laravel如何定义一个全局的常量,以及如何的使用全局常量。

    1200
    • laravel全局常量
  • Springboot如何生成cookie,获取cookie信息

    Springboot,cookie

    Springboot如何生成cookie,获取cookie信息,cookie就是一个小体积的键值对,格式:key=value;客户端和服务器端,通常使用http协议来进行数据传输,而http协议是无状态的。也就是客户端向同一个服务器端发送的第一次Request和第二次Request,是没有关联的。需要cookie来保存一些用户信息,每次向相同的域名(domian)和路径(path)发送Request时都会携带cookie。

    861
    • Springboot
    • cookie
-- 这已经是底线了,看看别的把! --