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 ...
随机推荐
- phpcookie类
1.需求 写一个cookie类 2.例子 <?php class cookie{ private $COOKIE_PREFIX = ""; private $COOKIE_E ...
- alert 替代效果smoke.js
在一些表单等需要弹窗提醒的时候,每个浏览器都有一个alert(),comfirm()函数能弹出信息,但是浏览器的自带的这种效果样式不统一,而且都固定在页面顶部: smoke.js轻量级的JS插件,他标 ...
- 基于winner 滤波平稳降噪效果
https://en.wikipedia.org/wiki/Wiener_filter Wiener filter solutions The Wiener filter problem has so ...
- .NET 获取类型中的属性
解决方案 通过反射的方式获取类型中的所有属性. 引用命名空间 using System.Reflection; 实体类 public class User { private string ...
- C#设计模式之工厂方法
工厂方法模式: 1.不再提供一个按钮工厂类来统一负责所有产品的创建,而是将具体按钮的创建过程交给专门的工厂子类去完成 如果出现新的按钮类型,只需要为这种新类型的按钮定义一个具体的工厂类就可以创建该新按 ...
- AngularJS Bootstrap
AngularJS 的首选样式表是 Bootstrap. 可以在 AngularJS 应用中加入 Twitter Bootstrap,你可以在你的 <head>元素中添加如下代码: < ...
- IBatis和Hibernate区别
1. 简介 Hibernate是当前最流行的O/R mapping框架.它出身于sf.net,现在已经成为Jboss的一部分了.iBATIS是另外一种优秀的O/R mapping框架,现已改名叫myB ...
- 【Java EE 学习 45】【Hibernate学习第二天】【对象的三种状态】【一对多关系的操作】
一.对象的三种状态. 1.对象有三种状态:持久化状态.临时状态.脱管状态(游离状态) 2.Session的特定方法能使得一个对象从一个状态转换到另外一个状态. 3.三种状态的说明 (1)临时状态:临时 ...
- Maven 添加自定义 archetype
环境:jdk7 maven3.23 eclipse mars 关于maven是使用插件自带的还是单独下载的,应该都是可以的,但是要注意maven和jdk版本的问题,比如3.2.3版本的maven支持j ...
- Timer计时器
private Timer timer; timer.schedule(new TimerTask() { @Override public void run() { if (isStopedReco ...