扒一扒php 数组排序
来源:互联网 发布:media buy 知乎 编辑:程序博客网 时间:2024/05/16 14:30
PHP是一门强大弱脚本语言开发快捷方便,但开发中也需谨慎使用不然遇到好多意想不到bug; 今天就以我开发中遇到问题为例扒一扒php排序的问题; PHP提供好多访问和操作单维和多维数组函数,但在不清楚内部数据结构下谨慎使用,如排序函数:sort,rsort,ksort,krsort,asort,arsort; 1、a(association)前缀表示以键值关联排序;2、k(key)前缀表示以键名关联排序;3、r(reverse)前缀表示以反方向排序。
以电商类促销工具多档满赠为例:
//满赠多档赠品信息 $giftItem = array(); $giftItem[] = array('price' => 3000, 'gift_num'=>4,'sku_num'=>500,'gift_amount'=>1500,'gift_id'=>'23224','gift_name'=>'水果'); $giftItem[] = array('price' => 1000, 'gift_num'=>6,'sku_num'=>100,'gift_amount'=>1000,'gift_id'=>'98324','gift_name'=>'王老吉'); $giftItem[] = array('price' => 2000, 'gift_num'=>2,'sku_num'=>300,'gift_amount'=>800,'gift_id'=>'10932','gift_name'=>'果粒橙'); $giftItem[] = array('price' => 4000, 'gift_num'=>10,'sku_num'=>400,'gift_amount'=>2000,'gift_id'=>'50901','gift_name'=>'宝矿力'); // 使用金额作为key $PriceDecArray = array(); foreach($giftItem as $giftItemV){ $price = $giftItemV['price']; $PriceDecArray[$price] = $giftItemV; }
Sort
sort对数组的组逐一按照ASCII排序,如果第一组的值ASCII码已经分别出大小不再比较其他组ASCII值,如果第一组组值全部相等继续下一组ASCII比较 一直到比较结果,注:key 顺序值也发生改变
sort($PriceDecArray); print_r($PriceDecArray); exit;----> result:<------Array( [0] => Array ( [price] => 1000 [gift_num] => 6 [sku_num] => 100 [gift_amount] => 1000 [gift_id] => 98324 [gift_name] => 王老吉 ) [1] => Array ( [price] => 2000 [gift_num] => 2 [sku_num] => 300 [gift_amount] => 800 [gift_id] => 10932 [gift_name] => 果粒橙 ) [2] => Array ( [price] => 3000 [gift_num] => 4 [sku_num] => 500 [gift_amount] => 1500 [gift_id] => 23224 [gift_name] => 水果 ) [3] => Array ( [price] => 4000 [gift_num] => 10 [sku_num] => 400 [gift_amount] => 2000 [gift_id] => 50901 [gift_name] => 宝矿力 ))
Rsort
Rsort 和Sort反之 按值ASCII码排序,Key顺序值发生改变
rsort($PriceDecArray);print_r($PriceDecArray); exit;----> result:<------Array( [0] => Array ( [price] => 4000 [gift_num] => 10 [sku_num] => 400 [gift_amount] => 2000 [gift_id] => 50901 [gift_name] => 宝矿力 ) [1] => Array ( [price] => 3000 [gift_num] => 4 [sku_num] => 500 [gift_amount] => 1500 [gift_id] => 23224 [gift_name] => 水果 ) [2] => Array ( [price] => 2000 [gift_num] => 2 [sku_num] => 300 [gift_amount] => 800 [gift_id] => 10932 [gift_name] => 果粒橙 ) [3] => Array ( [price] => 1000 [gift_num] => 6 [sku_num] => 100 [gift_amount] => 1000 [gift_id] => 98324 [gift_name] => 王老吉 ))
Asort
比较方式和Sort类似,但保留Key 原始顺序,使用时一定注意
asort($giftItem); print_r($giftItem); exit;----> result:<------Array( [1] => Array ( [price] => 1000 [gift_num] => 6 [sku_num] => 100 [gift_amount] => 1000 [gift_id] => 98324 [gift_name] => 王老吉 ) [2] => Array ( [price] => 2000 [gift_num] => 2 [sku_num] => 300 [gift_amount] => 800 [gift_id] => 10932 [gift_name] => 果粒橙 ) [0] => Array ( [price] => 3000 [gift_num] => 4 [sku_num] => 500 [gift_amount] => 1500 [gift_id] => 23224 [gift_name] => 水果 ) [3] => Array ( [price] => 4000 [gift_num] => 10 [sku_num] => 400 [gift_amount] => 2000 [gift_id] => 50901 [gift_name] => 宝矿力 ))
Arsort
和Rsort 降续排序方式类似 ,但保留Key 原始顺序
arsort($giftItem);print_r($giftItem); exit;----> result:<------Array( [3] => Array ( [price] => 4000 [gift_num] => 10 [sku_num] => 400 [gift_amount] => 2000 [gift_id] => 50901 [gift_name] => 宝矿力 ) [0] => Array ( [price] => 3000 [gift_num] => 4 [sku_num] => 500 [gift_amount] => 1500 [gift_id] => 23224 [gift_name] => 水果 ) [2] => Array ( [price] => 2000 [gift_num] => 2 [sku_num] => 300 [gift_amount] => 800 [gift_id] => 10932 [gift_name] => 果粒橙 ) [1] => Array ( [price] => 1000 [gift_num] => 6 [sku_num] => 100 [gift_amount] => 1000 [gift_id] => 98324 [gift_name] => 王老吉 ))
Ksort
按着数组key值升序排序,key 顺序发生变化
ksort($PriceDecArray); print_r($PriceDecArray); ----> result:<------Array( [1000] => Array ( [price] => 1000 [gift_num] => 6 [sku_num] => 100 [gift_amount] => 1000 [gift_id] => 98324 [gift_name] => 王老吉 ) [2000] => Array ( [price] => 2000 [gift_num] => 2 [sku_num] => 300 [gift_amount] => 800 [gift_id] => 10932 [gift_name] => 果粒橙 ) [3000] => Array ( [price] => 3000 [gift_num] => 4 [sku_num] => 500 [gift_amount] => 1500 [gift_id] => 23224 [gift_name] => 水果 ) [4000] => Array ( [price] => 4000 [gift_num] => 10 [sku_num] => 400 [gift_amount] => 2000 [gift_id] => 50901 [gift_name] => 宝矿力 ))
Krsort
按着数组key值降序排序,key 顺序发生变化
ksort($PriceDecArray); print_r($PriceDecArray);----> result:<------Array( [4000] => Array ( [price] => 4000 [gift_num] => 10 [sku_num] => 400 [gift_amount] => 2000 [gift_id] => 50901 [gift_name] => 宝矿力 ) [3000] => Array ( [price] => 3000 [gift_num] => 4 [sku_num] => 500 [gift_amount] => 1500 [gift_id] => 23224 [gift_name] => 水果 ) [2000] => Array ( [price] => 2000 [gift_num] => 2 [sku_num] => 300 [gift_amount] => 800 [gift_id] => 10932 [gift_name] => 果粒橙 ) [1000] => Array ( [price] => 1000 [gift_num] => 6 [sku_num] => 100 [gift_amount] => 1000 [gift_id] => 98324 [gift_name] => 王老吉 ))
总结:
对Value 排序使用sort rsort;
对key 排序使用ksort krsort;
需要保留key 顺序使用asort arsot;
[参考 php Array 函数]
http://www.w3school.com.cn/php/php_ref_array.asp
http://www.cnblogs.com/TimeStory/p/4201385.html
0 0
- 扒一扒php 数组排序
- PHP数组排序
- PHP 二维数组排序
- php数组的排序
- php数组随机排序
- PHP二维数组排序
- PHP数组的排序
- PHP多维数组排序
- php数组排序函数
- php二维数组排序
- PHP 数组排序
- PHP 二维数组排序
- php 数组排序
- PHP 数组排序函数
- php 二维数组排序
- php 多维数组排序
- php二维数组排序
- php二维数组排序
- playframework1.2.x博客教程(五)-文章评论
- JS
- Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件
- PHP
- 动态表单设计
- 扒一扒php 数组排序
- POJ 3311 (状态压缩dp)
- Oracle not in 不能有null
- 拷贝构造函数被调用的情形
- 技术博客开通留念
- vsftpd移植和配置详解。
- 解决Spring MVC框架静态资源文件显示问题
- 01背包、完全背包、多重背包归纳
- (模板)欧拉函数