php 多维数组排序求和,PHP 多维数组排序 array_multisort()

用PHP自带array_multisort函数排序

$data = array();

$data[] = array('volume' => 67, 'edition' => 2);

$data[] = array('volume' => 86, 'edition' => 1);

$data[] = array('volume' => 85, 'edition' => 6);

$data[] = array('volume' => 98, 'edition' => 2);

$data[] = array('volume' => 86, 'edition' => 6);

$data[] = array('volume' => 67, 'edition' => 7);

// 取得列的列表

foreach ($data as $key => $row)

{

$volume[$key]  = $row['volume'];

$edition[$key] = $row['edition'];

}

array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

print_r($data);

?>

输出结果:

复制代码 代码如下:

Array

(

[0] => Array

(

[volume] => 98

[edition] => 2

)

[1] => Array

(

[volume] => 86

[edition] => 1

)

[2] => Array

(

[volume] => 86

[edition] => 6

)

[3] => Array

(

[volume] => 85

[edition] => 6

)

[4] => Array

(

[volume] => 67

[edition] => 2

)

[5] => Array

(

[volume] => 67

[edition] => 7

)

)

关于array_multisort官方文档也有比较详细的说明:http://www.php.net/manual/zh/function.array-multisort.php

二、自定义函数排序1

复制代码 代码如下:

$data = array();

$data[] = array('volume' => 67, 'edition' => 2);

$data[] = array('volume' => 86, 'edition' => 1);

$data[] = array('volume' => 85, 'edition' => 6);

$data[] = array('volume' => 98, 'edition' => 2);

$data[] = array('volume' => 86, 'edition' => 6);

$data[] = array('volume' => 67, 'edition' => 7);

// 取得列的列表

foreach ($data as $key => $row)

{

$volume[$key]  = $row['volume'];

$edition[$key] = $row['edition'];

}

$ret = arraySort($data, 'volume', 'desc');

print_r($ret);

/**

* @desc arraySort php二维数组排序 按照指定的key 对数组进行排序

* @param array $arr 将要排序的数组

* @param string $keys 指定排序的key

* @param string $type 排序类型 asc | desc

* @return array

*/

function arraySort($arr, $keys, $type = 'asc') {

$keysvalue = $new_array = array();

foreach ($arr as $k => $v){

$keysvalue[$k] = $v[$keys];

}

$type == 'asc' ? asort($keysvalue) : arsort($keysvalue);

reset($keysvalue);

foreach ($keysvalue as $k => $v) {

$new_array[$k] = $arr[$k];

}

return $new_array;

}

?>

输出结果:

复制代码 代码如下:

Array

(

[3] => Array

(

[volume] => 98

[edition] => 2

)

[4] => Array

(

[volume] => 86

[edition] => 6

)

[1] => Array

(

[volume] => 86

[edition] => 1

)

[2] => Array

(

[volume] => 85

[edition] => 6

)

[5] => Array

(

[volume] => 67

[edition] => 7

)

[0] => Array

(

[volume] => 67

[edition] => 2

)

)

这个自定义函数与系统函数的一个区别就是:自定义函数只支持针对某一个key的排序,如果要支持多个key的排序需要执行多次;

而系统函数array_multisort可以一次性对多个key且可以指定多个排序规则,系统函数还是相当强大的,推荐使用系统函数,毕竟是C底层实现

的,这里只是举例说明如果通过自定义函数来对数组进行排序,当然这个自定义函数也可以继续扩展来支持更多的排序规则。在取排名、排行榜、成绩等场景中用到

的还是非常多的。

三、自定义函数排序2

以下函数是对一个给定的二维数组按照指定的键值进行排序,先看函数定义:

复制代码 代码如下:

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[$k] = $arr[$k];

}

return $new_array;

}

它可以对二维数组按照指定的键值进行排序,也可以指定升序或降序排序法(默认为升序),用法示例:

复制代码 代码如下:

$array = array(

array('name'=>'手机','brand'=>'诺基亚','price'=>1050),

array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300),

array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100),

array('name'=>'跑步机','brand'=>'三和松石','price'=>4900),

array('name'=>'手表','brand'=>'卡西欧','price'=>960),

array('name'=>'液晶电视','brand'=>'索尼','price'=>6299),

array('name'=>'激光打印机','brand'=>'惠普','price'=>1200)

);

$ShoppingList = array_sort($array,'price');

print_r($ShoppingList);

上面是对$array这个二维数组按照'price'从低到高的排序。

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

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

php 对多维数组排序array_multisort

php 对多维数组排序array_multisort 排序顺序标志: SORT_ASC - 按照上升顺序排序 SORT_DESC - 按照下降顺序排序 排序类型标志: SORT_REGULAR - 将 ...

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

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

二维,多维数组排序array_multisort()函数的使用

对于数组的排序,很很多方法:随便百度了一下 sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据值,以升序对关联数组进行排序 ksort() - 根据键, ...

对维数组排序 array_multisort()的应用

PHP允许在多维数组上执行一些比较复杂的排序--例如,首先对一个嵌套数组使用一个普通的关键字进行排序,然后再根据另一个关键字进行排序.这与使用SQL的ORDER BY语句对多个字段进行排序非常相似.为 ...

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

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

使用 array_multisort 对多维数组排序

array_multisort() 函数对多个数组或多维数组进行排序. 用法详看:http://www.w3school.com.cn/php/func_array_multisort.asp 例子: ...

PHP array_multisort实现二维数组排序

PHP array_multisort实现二维数组排序 参数中的数组被当成一个表的列并以行来进行排序 - 这类似 SQL 的 ORDER BY 子句的功能.第一个数组是要排序的主要数组.数组中的行(值 ...

PHP二维数组排序(list_order)

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

随机推荐

图文相关性 flickr数据实验结论_1

初始化的选取很重要,random_uniform的效果远远好于random_normal, 是否有bias对效果影响很小 红色是random_uniform初始化,对比random_normal初始化 ...

【学习整理】Tarjan:强连通分量+割点+割边

Tarjan求强连通分量 在一个有向图中,如果某两点间都有互相到达的路径,那么称中两个点强联通,如果任意两点都强联通,那么称这个图为强联通图:一个有向图的极大强联通子图称为强联通分量.   算法可以在 ...

J2SE知识点摘记(十三)

1.        字节流 InputStream(输入字节流)是一个定义了java流式字节流输入模式的抽象类.该类的所有方法在出错时都会引发一个IOExcepiton异常. Void close() ...

Re.常系数齐次递推

前言 嗯   我之前的不知道多少天看这个的时候到底在干什么呢 为什么那么..  可能大佬们太强的缘故 最后仔细想想思路那么的emmm 不说了  要落泪了 唔唔唔 前置 多项式求逆 多项式除法/取模 常 ...

Lodop条形码竖条和值右端不对齐的解决方法

当Lodop条形码设置的宽度比较短,数值比较多的时候,会出现条码的竖条和右端不对齐.个人测试了一下,发现解决办法有三种:1.增加条形码的宽度.2.隐藏条码本身的值,用text文本代替.3.修改条形码下 ...

Vue组件中的问题

错误信息: 提示信息含义:组件模板中只能包含一个根元素 解决办法:在模板元素内部增加块级元素div将这些元素标签包裹起来,如图所示

Sql 查询当天、本周、本月记录、上周、上月记录

查询当天: select * from info where DateDiff(dd,datetime,getdate())=0 查询24小时内: select * from info where D ...

thread.event说明

Python中的threading.Event()操控多线程的过程有: - 定义事件:man_talk_event = threading.Event() - 创建线程,传入对应事件:t1 = thr ...

WebUploader 解决文件多次上传和删除上传文件的问题

文件多次上传有两种情况: 1. 上传前的多次选择 2. 上传成功后,再次选择 其实API上,已经有了介绍了,不知道为什么有同学还是不知道如何做,我来抛砖引玉吧. 配置项: duplicate {Boo ...

【spark】RDD操作

RDD操作分为转换操作和行动操作. 对于RDD而言,每一次的转化操作都会产生不同的RDD,供一个操作使用. 我们每次转换得到的RDD是惰性求值的 也就是说,整个转换过程并不是会真正的去计算,而是只记录 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值