PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)
几个经过封装的方法:
1.使用 array_multisort() 函数
<?php $arr = [
['name'=>'dee','age'=>28],
['name'=>'emperor', 'age'=>30],
['name'=>'Lee', 'age'=>32],
['name'=>'Arshavin', 'age'=>33],
['name'=>'Totti', 'age'=>40]
]; $arr2 = [
['name'=>'Ozil', 'age'=>27],
['name'=>'CR7', 'age'=>29],
['name'=>'Doctor', 'age'=>33],
['name'=>'John', 'age'=>35]
]; function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {
if (is_array($multi_array)) {
foreach ($multi_array as $row_array) {
if (is_array($row_array)) {
$key_array[] = $row_array[$sort_key];
} else {
return FALSE;
}
}
} else {
return FALSE;
}
array_multisort($key_array, $sort, $multi_array);
return $multi_array;
} $arr = array_merge($arr, $arr2);
$arr = multi_array_sort($arr, 'age', SORT_ASC); echo '<pre>';
print_r($arr);
说明:在 multi_array_sort 的自定义方法中,$key_array 完成对年龄的一维数组的排序,再使用 array_multisort() 函数对原数组进行排序。
bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。输入数组被当成一个表的列并以行来排序——这类似于 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话就按照下一个输入数组中相应值的大小来排序,依此类推。
2. 使用临时数组存储需要排序的字段,经过排序后,通过在 froeach 循环中 $new_array[] = $arr[$k]; 把经过排序的字段数组的索引值作为原始数组的索引值存储至新的数组
<?php $arr = [
['name'=>'dee','age'=>28],
['name'=>'emperor', 'age'=>30],
['name'=>'Lee', 'age'=>32],
['name'=>'Arshavin', 'age'=>33],
['name'=>'Totti', 'age'=>40]
]; $arr2 = [
['name'=>'Ozil', 'age'=>27],
['name'=>'CR7', 'age'=>29],
['name'=>'Doctor', 'age'=>33],
['name'=>'John', 'age'=>35]
]; function array_sort($arr, $keys, $type = 'asc') {
$keysvalue = $new_array = array();
foreach ($arr as $k => $v) {
$keysvalue[$k] = $v[$keys];
} if ($type == 'asc') {
asort($keysvalue);
} else {
arsort($keysvalue);
} reset($keysvalue); foreach ($keysvalue as $k => $v) {
$new_array[] = $arr[$k];
} return $new_array;
} $arr = array_merge($arr, $arr2);
$arr = array_sort($arr, 'age'); echo '<pre>';
print_r($arr);
3. 和 2 差不多,多了些验证
<?php $arr = [
['name'=>'dee','age'=>28],
['name'=>'emperor', 'age'=>30],
['name'=>'Lee', 'age'=>32],
['name'=>'Arshavin', 'age'=>33],
['name'=>'Totti', 'age'=>40]
]; $arr2 = [
['name'=>'Ozil', 'age'=>27],
['name'=>'CR7', 'age'=>29],
['name'=>'Doctor', 'age'=>33],
['name'=>'John', 'age'=>35]
]; function array_sort($array,$keys,$type='asc'){ if(!isset($array) || !is_array($array) || empty($array)){
return '';
} if(!isset($keys) || trim($keys)==''){
return '';
} if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){
return '';
} $keysvalue=array();
foreach($array as $key=>$val){
$keysvalue[] =$val[$keys];
} asort($keysvalue); //key值排序
reset($keysvalue); //指针重新指向数组第一个 foreach($keysvalue as $key=>$vals) {
$keysort[] = $key;
} $keysvalue = array();
$count=count($keysort); if(strtolower($type) != 'asc'){
for($i=$count-1; $i>=0; $i--) {
$keysvalue[] = $array[$keysort[$i]];
}
}else{
for($i=0; $i<$count; $i++){
$keysvalue[] = $array[$keysort[$i]];
}
}
return $keysvalue;
} $arr = array_merge($arr, $arr2);
$arr = array_sort($arr, 'age'); echo '<pre>';
print_r($arr);
PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)的更多相关文章
- 实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)
实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种:array_multisort()函数对多个数组或多维数组进行排序. //对数组$ ...
- 二维数组按某个键值排序 FOR PHP
$arr=[ array( 'name'=>'小坏龙', 'age'=>28 ), array( 'name'=>'小坏龙2', 'age'=>14 ), array( 'na ...
- 如何通过numpy获得二维或多维数组的最大、小值索引
虽然numpy数组中有argmax的函数可以获得数组的最大值的索引,但该函数获得的是numpy数组平铺后的索引,也就是一维索引.那么要怎样才能获得二维索引呢?实现很简单,比如我下面的代码: impor ...
- PHP中如何对二维数组按某个键值进行排序
$arr=[ array( 'name'=>'张三', 'age'=>28 ), array( 'name'=> ...
- 首先定义一个5X8的二维数组,然后使用随机数填充满。借助Arrays的方法对二维数组进行排序。
package day02; import java.util.Arrays; import java.util.Random; public class Test01 { public static ...
- 一个有用的排序函数,array_multisort(),下面的一个用法是根据二维数组里的一个字段值的大小,对该二维数组进行重新排序
从二维数组$cashes中取出一列 'store_id'(二维数组中的每个一维数组都有的字段),按照这个的大小排序,对二维数组$caches里面的一维数组进行重新排序 实际应用如下 想让相同部门的排在 ...
- PHP编程实现多维数组按照某个键值排序的方法
1.array_multisort()函数对多个数组或多维数组进行排序. //对数组$hotcat按照count键值大小降序进行排序: $hotcat =array( array('1501'=&g ...
- php两个多维数组组合遍历
$res = $this->LoanRecord->searchloan($conditions,$columns,$page,$this->num,$user_id); forea ...
- PHP二维数组按某个键值排序
$data=Array( [0] => Array ( [id] => 2 [user_id] => 14 ...
随机推荐
- TCP/IP三次握手和HTTP过程
1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在"无差别&qu ...
- PHP setcookie() 函数
语法 setcookie(name,value,expire,path,domain,secure): name 必需.规定 cookie 的名称. value 必需.规定 cookie 的值. ex ...
- Linux Swap分区设定
因为准备在linux上面安装Oracle数据库,据说swap分区小于4G容易失败,天啦噜的我连swap分区是啥都不是非常清楚, 大概有个印象吧,但先搞大了再说. 测试证明Ubuntu14默认的swap ...
- webstormkey
webStorm : UserName:William ===== LICENSE BEGIN ===== 45550-12042010 00001SzFN0n1bPII7FnAxnt0DDOPJA ...
- asp.net mvc 多级文件夹
ASP.NET MVC - 定制属于你自己的ViewEngine 标签: asp.netmvcstring引擎razorapplication 2012-07-26 14:17 5365人阅读 评论( ...
- .NET LINQ查询语法与方法语法
LINQ 查询语法与方法语法 通过使用 C# 3.0 中引入的声明性查询语法,介绍性 LINQ 文档中的多数查询都被编写为查询表达式. 但是,.NET 公共语言运行时 (CLR) 本身并不具 ...
- Centos7 修改mysql指定用户的密码
1.登陆mysql或者mariadb(两种任选其一) [root@localhost ~]# mysql -u root [root@localhost ~]# mysql -uroot -p 2.切 ...
- WinForm/MIS项目开发之中按钮级权限实践
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- 水晶报表初体验(Visual Studio 2010)
安装水晶报表后如下使用: 配置rpt文件,如图 前台(Asp.net页面): <%@ Register Assembly="CrystalDecisions.Web, Version= ...
- mysql数据库的安装与使用
ubuntu下面的mysql安装 sudo apt-get install mysql-server 安装后,登陆 mysql -u root -p mysql -h 主机名 -u 用户名 -p -h ...