function my_sort($arrays,$sort_key,$sort_order=SORT_DESC,$sort_type=SORT_NUMERIC ){
if(is_array($arrays)){
foreach ($arrays as $array){
if(is_array($array)){
$key_arrays[] = $array[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_arrays,$sort_order,$sort_type,$arrays);
return $arrays;
}

  

array_multisort(array1,sorting order, sorting type,array2,array3..)是对多个数组或多维数组进行排序的函数。

array1 必需。规定输入的数组。
sorting order 可选。规定排列顺序。可能的值是 SORT_ASC 和 SORT_DESC。
sorting type 可选。规定排序类型。可能的值是SORT_REGULAR、SORT_NUMERIC和SORT_STRING。
array2 可选。规定输入的数组。
array3 可选。规定输入的数组。

参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。

第一个参数是数组,随后的每一个参数可能是数组,也可能是下面的排序顺序标志(排序标志用于更改默认的排列顺序)之一:

  • SORT_ASC - 默认,按升序排列。(A-Z)
  • SORT_DESC - 按降序排列。(Z-A)

随后可以指定排序的类型:

  • SORT_REGULAR - 默认。将每一项按常规顺序排列。
  • SORT_NUMERIC - 将每一项按数字顺序排列。
  • SORT_STRING - 将每一项按字母顺序排列

<?php 

    function my_sort($arrays,$sort_key,$sort_order=SORT_ASC,$sort_type=SORT_NUMERIC ){
if(is_array($arrays)){
foreach ($arrays as $array){
if(is_array($array)){
$key_arrays[] = $array[$sort_key];
}else{
return false;
}
}
}else{
return false;
}
array_multisort($key_arrays,$sort_order,$sort_type,$arrays);
return $arrays;
} $person = array(
array('id'=>1,'name'=>'fj','weight'=>100,'height'=>180),
array('id'=>2,'name'=>'tom','weight'=>53,'height'=>150),
array('id'=>3,'name'=>'jerry','weight'=>120,'height'=>156),
array('id'=>4,'name'=>'bill','weight'=>110,'height'=>190),
array('id'=>5,'name'=>'linken','weight'=>80,'height'=>200),
array('id'=>6,'name'=>'madana','weight'=>95,'height'=>110),
array('id'=>7,'name'=>'jordan','weight'=>70,'height'=>170)
); var_dump($person); $person = my_sort($person,'name',SORT_ASC,SORT_STRING); var_dump($person); $person = my_sort($person,'weight'); var_dump($person);
?>

  结果如下

array (size=7)
0 =>
array (size=4)
'id' => int 1
'name' => string 'fj' (length=2)
'weight' => int 100
'height' => int 180
1 =>
array (size=4)
'id' => int 2
'name' => string 'tom' (length=3)
'weight' => int 53
'height' => int 150
2 =>
array (size=4)
'id' => int 3
'name' => string 'jerry' (length=5)
'weight' => int 120
'height' => int 156
3 =>
array (size=4)
'id' => int 4
'name' => string 'bill' (length=4)
'weight' => int 110
'height' => int 190
4 =>
array (size=4)
'id' => int 5
'name' => string 'linken' (length=6)
'weight' => int 80
'height' => int 200
5 =>
array (size=4)
'id' => int 6
'name' => string 'madana' (length=6)
'weight' => int 95
'height' => int 110
6 =>
array (size=4)
'id' => int 7
'name' => string 'jordan' (length=6)
'weight' => int 70
'height' => int 170
array (size=7)
0 =>
array (size=4)
'id' => int 4
'name' => string 'bill' (length=4)
'weight' => int 110
'height' => int 190
1 =>
array (size=4)
'id' => int 1
'name' => string 'fj' (length=2)
'weight' => int 100
'height' => int 180
2 =>
array (size=4)
'id' => int 3
'name' => string 'jerry' (length=5)
'weight' => int 120
'height' => int 156
3 =>
array (size=4)
'id' => int 7
'name' => string 'jordan' (length=6)
'weight' => int 70
'height' => int 170
4 =>
array (size=4)
'id' => int 5
'name' => string 'linken' (length=6)
'weight' => int 80
'height' => int 200
5 =>
array (size=4)
'id' => int 6
'name' => string 'madana' (length=6)
'weight' => int 95
'height' => int 110
6 =>
array (size=4)
'id' => int 2
'name' => string 'tom' (length=3)
'weight' => int 53
'height' => int 150
array (size=7)
0 =>
array (size=4)
'id' => int 2
'name' => string 'tom' (length=3)
'weight' => int 53
'height' => int 150
1 =>
array (size=4)
'id' => int 7
'name' => string 'jordan' (length=6)
'weight' => int 70
'height' => int 170
2 =>
array (size=4)
'id' => int 5
'name' => string 'linken' (length=6)
'weight' => int 80
'height' => int 200
3 =>
array (size=4)
'id' => int 6
'name' => string 'madana' (length=6)
'weight' => int 95
'height' => int 110
4 =>
array (size=4)
'id' => int 1
'name' => string 'fj' (length=2)
'weight' => int 100
'height' => int 180
5 =>
array (size=4)
'id' => int 4
'name' => string 'bill' (length=4)
'weight' => int 110
'height' => int 190
6 =>
array (size=4)
'id' => int 3
'name' => string 'jerry' (length=5)
'weight' => int 120
'height' => int 156

  

<?php
$array[] = array("age"=>20,"name"=>"li");
$array[] = array("age"=>21,"name"=>"ai");
$array[] = array("age"=>20,"name"=>"ci");
$array[] = array("age"=>22,"name"=>"di"); foreach ($array as $key=>$value){
$age[$key] = $value['age'];
$name[$key] = $value['name'];
}
echo "<pre>";
print_r($array);
echo "</pre>";
array_multisort($age,SORT_STRING,SORT_ASC,$name,SORT_STRING,SORT_DESC,$array);
echo "<pre>";
print_r($array);
echo "</pre>";

  

通过测试发现,如果第一个键值对比相同的,还可以参数再来一组,通过第二组进行排序.

这里的重点就是,先把要排序的key存到一个一维数组中,然后就可以使用array_multisort()这个函数,将数组按照key进行排序了,当然,这里的排序你完全可以不适用array_multisort()这个函数,仅仅通过foreach遍历也能达到这个效果,但是既然php开发者给我们提供了更好的办法,我们就可以省去不必要的麻烦了

原文地址 https://www.cnblogs.com/tdalcn/p/6420055.html

 

php对二维数组排序的更多相关文章

  1. JS二维数组排序组合

    需求是这样的:http://q.cnblogs.com/q/29093/ 这里简述一下: 现在有一个不确定长度的数组.比如:var temp=[["Fu","Hai&qu ...

  2. PHP二维数组排序(list_order)

    /** * 对二维数组进行排序 * 模拟 数据表记录按字段排序 * * <code> * @list_order($list, $get['orderKey'], $get['orderT ...

  3. PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)

    一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...

  4. php基础篇-二维数组排序 array_multisort

    原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...

  5. PHP二维数组排序(感谢滔哥)

    滔哥原创 /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\|| ...

  6. PHP 二维数组排序保持键名不变

    对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例: <?php $data = ar ...

  7. 一个不错的PHP二维数组排序函数简单易用存用

    一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...

  8. PHP二维数组排序(感谢滔哥lvtao.net)

    滔哥原创 /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\|| ...

  9. JS:二维数组排序和获取子级元素

    JS:二维数组排序和获取子级元素 1. 二维数组排序 1.按数值排序 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; 如果我们要按每个子数组的第一列来排序要如 ...

  10. php实现二维数组排序array_multisort($ages, SORT_DESC, $home)函数

    1.sql查询排序参数是order by,那么php进行排序呢 可以参考array_multisrot函数 //php进行二维数组排序 -xzz1009 foreach($home as $home) ...

随机推荐

  1. node.js之express中app.use

    express中app.use 用法: app.use([path,] function [, function…]) 一.app.use() 在express中是怎么工作的 app.use在expr ...

  2. scala (2) while 和变量

    (1)在scala中声明变量有两个关键字,val和var val: 是不可变的,即声明了变量不能再进行更改,类似于java中的final var: 是可变的,即可以重新对其赋值 声明变量的通用格式:  ...

  3. 20155210潘滢昊 Java第二次试验

    20155210潘滢昊 Java第二次试验 实验内容 学会JunitTest的使用 实验代码 MyUtilTest代码: import org.junit.*; import junit.framew ...

  4. 20155239 实验四 Android程序设计

    20155239 实验四 Android程序设计 目录 第24章:初识Android 任务一: 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 学习 ...

  5. Lambada表达式的作用

    Lambda函数的用处   假设你设计了一个地址簿的类.现在你要提供函数查询这个地址簿,可能根据姓名查询,可能根据地址查询,还有可能两者结合.要是你为这些情况都写个函数,那么你一定就跪了.所以你应该提 ...

  6. Selenium2+python自动化-iframe

    前言 本篇详细讲解iframe的相关切换操作. 一.frame和iframe区别 Frame与Iframe两者可以实现的功能基本相同,不过Iframe比Frame具有更多的灵活性. frame是整个页 ...

  7. 03-运行第一个docker容器

    环境选择 容器需要管理工具.runtime 和操作系统,我们的选择如下: 1.管理工具 - Docker Engine因为 Docker 最流行使用最广泛. 2.runtime - runc Dock ...

  8. 从零开始的Python学习Episode 13——常用模块

    模块 一.time模块 时间戳(timestamp) :时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量. 元组(struct_time)   :struct_time元组共有9 ...

  9. 从零开始的Python学习Episode 8——深浅拷贝

    深浅拷贝 一.浅拷贝 列表中存储的是数据的内存地址,当我们要查询或修改列表中的数据时,我们是通过列表中的地址找到要访问的内存.当我们修改列表中的数据时,如果修改的是一个不可变类型(整型,长整型,浮点数 ...

  10. 笔试题——C++字符排序

    题目:字符排序 题目介绍:输入一组以空格隔开的字数串,将它们奇数位升序排序,偶数位降序排序,再重新输出成新的字数串. 例: 输入: 4 6 2 3 6 7 8 1 奇数位:4 2 6 8 ——2 4 ...