扒一扒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
原创粉丝点击