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

PHP实现多维数组按指定值排序

主要用到的PHP函数 array_multisort()

1.先实现指定多维数组一个字段排序
根据二维数组的id值来排序,转换后的数组格式如下:
function arraySortByOneField($data, $field, $sort = SORT_DESC)
{
  $field = array_column($data, $field);
  array_multisort($field,$sort,$data);
  return $data;
}
 
  

  

 如:
$data = array(0=>array('id'=>7, 'name'=>'Apple', 'age'=> 18),1=>array('id'=>8, 'name'=>'Bed', 'age'=>17),2=>array('id'=>6, 'name'=>'Cos', 'age'=>16),3=>array('id'=>5, 'name'=>'Cos', 'age'=>14));

$newArray = arraySortByOneField($data, 'id', SORT_DESC);

var_dump($newArray );
 
  

  

2.实现多维数组的指定两个字段排序
根据二维数组的多个属性值来排序,转换后的数组格式如下:

function sortArrByManyField()
{
  $args = func_get_args();
  if(empty($args)){
    return null;
  }
  $arr = array_shift($args);
  if(!is_array($arr)){
    throw new Exception("第一个参数不为数组");
  }
  foreach($args as $key => $field){
    if(is_string($field)){
      $temp = array();
      foreach($arr as $index=> $val){
        $temp[$index] = $val[$field];
      }
      $args[$key] = $temp;
    }
  }
  $args[] = &$arr;//引用值
  call_user_func_array('array_multisort',$args);
  return array_pop($args);
}
 
  

  

 如:
$data = array(0=>array('id'=>7, 'name'=>'Apple', 'age'=> 18),1=>array('id'=>8, 'name'=>'Bed', 'age'=>17),2=>array('id'=>6, 'name'=>'Cos', 'age'=>16),3=>array('id'=>5, 'name'=>'Cos', 'age'=>14));

$newArray = arraySortByManyField($data, 'id', SORT_ASC, 'name', SORT_ASC, 'age', SORT_DESC);

var_dump($newArray );
 
  

  

 

转载于:https://www.cnblogs.com/qhorse/p/10577408.html

相关文章:

  • 高分笔记_括号匹配
  • 2018-2019-2 《网络对抗技术》Exp2 后门原理与应用 20165211
  • 每日 30 秒 ⏱ 谁敢与我一战
  • 用Python爬取王者农药英雄皮肤
  • 杂记:Python 两坑
  • Sass预处理器常用功能(OneLine周分享)
  • Java程序设计第一次作业
  • mysql 原理 ~ 线程与IO
  • 牛客挑战赛30 简要题解
  • 【复习笔记】---java基础
  • 运维工作钱少、事多而且杂?年轻人,你这个思想很危险吶
  • centos7下关闭sshd的tcp6
  • Media Queries实现屏幕适配
  • SkyWalking Liunx 环境搭建NetCore接入
  • 死磕 java集合之HashMap源码分析
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【前端学习】-粗谈选择器
  • Android Studio:GIT提交项目到远程仓库
  • CentOS6 编译安装 redis-3.2.3
  • CentOS从零开始部署Nodejs项目
  • css选择器
  • JavaScript新鲜事·第5期
  • JavaWeb(学习笔记二)
  • Java新版本的开发已正式进入轨道,版本号18.3
  • js ES6 求数组的交集,并集,还有差集
  • Js基础知识(一) - 变量
  • Markdown 语法简单说明
  • Python进阶细节
  • Python语法速览与机器学习开发环境搭建
  • SQLServer之创建数据库快照
  • 番外篇1:在Windows环境下安装JDK
  • 将 Measurements 和 Units 应用到物理学
  • 聊聊sentinel的DegradeSlot
  • 前端技术周刊 2019-02-11 Serverless
  • 如何用vue打造一个移动端音乐播放器
  • 使用agvtool更改app version/build
  • 小程序button引导用户授权
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 写给高年级小学生看的《Bash 指南》
  • const的用法,特别是用在函数前面与后面的区别
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​iOS实时查看App运行日志
  • (3)llvm ir转换过程
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • .form文件_SSM框架文件上传篇
  • .net web项目 调用webService
  • .NET 材料检测系统崩溃分析
  • .Net 应用中使用dot trace进行性能诊断
  • .Net 知识杂记
  • ::
  • @html.ActionLink的几种参数格式