php多维数组的去重(针对任意的键值进行去重)--二维数组的唯一--时间复杂度~O(n)
2015-09-19 17:12
716 查看
以二维数组为例,来说明针对任意键值的去重,时间复杂度为~O(n),只用一个foreach循环:
输出结果:
As for the arbitrarily key:
Array ( [0] => Array ( [name] => james [age] => 30 ) [1] => Array ( [name] => susu [age] => 26 ) [new] => Array ( [name] => kube [age] => 37 ) [list] => Array ( [name] => kube [age] => 27 ) )
开发实例:优惠券去重(以 优惠金额-订单金额字段不能重复去除重复项)
要求:优惠金额和订单金额都一样的优惠券要求只展示一张给用户选择,并且展示最快到期的那张:
输出结果:
Array( [100-800] =>Array ( [couponCode] => 3033323852301057 [usableStartTime] => 1439740800[usableEndTime] => 1440768100 [couponAmount] => 100 [orderAmount] =>800 ) [200-800]=>
Array ( [couponCode] => 3033323852301060 [usableStartTime] =>1439740800 [usableEndTime] => 1440758100 [couponAmount] => 200 [orderAmount]=> 800 ) )
<?php $arr = array( '0'=>array( 'name'=>'james', 'age'=>30, ), '1'=>array( 'name'=>'susu', 'age'=>26, ), '2'=>array( 'name'=>'james', 'age'=>30, ), 'new'=>array( 'name'=>'kube', 'age'=>37, ), 'list'=>array( 'name'=>'kube', 'age'=>27, ), ); /*针对任意键值来进行去重*/ function getArrayUniqueByKeys($arr) { $arr_out =array(); foreach($arr as $k => $v) { $key_out = $v['name']."-".$v['age']; //提取内部一维数组的key(name age)作为外部数组的键 if(array_key_exists($key_out,$arr_out)){ continue; } else{ $arr_out[$key_out] = $arr[$k]; //以key_out作为外部数组的键 $arr_wish[$k] = $arr[$k]; //实现二维数组唯一性 } } return $arr_wish; } $arr_wish = getArrayUniqueByKeys($arr); printf("As for the arbitrarily key:<br>"); print_r($arr_wish); echo "<br/>"; ?>
输出结果:
As for the arbitrarily key:
Array ( [0] => Array ( [name] => james [age] => 30 ) [1] => Array ( [name] => susu [age] => 26 ) [new] => Array ( [name] => kube [age] => 37 ) [list] => Array ( [name] => kube [age] => 27 ) )
开发实例:优惠券去重(以 优惠金额-订单金额字段不能重复去除重复项)
要求:优惠金额和订单金额都一样的优惠券要求只展示一张给用户选择,并且展示最快到期的那张:
<?php $arrCoupon = array( '0'=>array( 'couponCode' => '3033323852301056', 'usableStartTime' => "1439740800", 'usableEndTime'=>"1440798100", 'couponAmount' =>100, 'orderAmount'=> 800, ), '1'=>array( 'couponCode' => '3033323852301057', 'usableStartTime' => "1439740800", 'usableEndTime'=>"1440768100", 'couponAmount' =>100, 'orderAmount'=> 800, ), '2'=>array( 'couponCode' => '3033323852301058', 'usableStartTime' => "1439740800", 'usableEndTime'=>"1440788100", 'couponAmount' =>100, 'orderAmount'=> 800, ), '3'=>array( 'couponCode' => '3033323852301059', 'usableStartTime' => "1439740800", 'usableEndTime'=>"1440779100", 'couponAmount' =>200, 'orderAmount'=> 800, ), '4'=>array( 'couponCode' => '3033323852301060', 'usableStartTime' => "1439740800", 'usableEndTime'=>"1440758100", 'couponAmount' =>200, 'orderAmount'=> 800, ), '5'=>array( 'couponCode' => '3033323852301061', 'usableStartTime' => "1439740800", 'usableEndTime'=>"1440798100", 'couponAmount' =>200, 'orderAmount'=> 800, ), ); //print_r($arrCoupon); function getArrayUniqueByKey($arr) { $arrWish = array(); $today = time(); foreach ($arr as $k => $v) { if (($v['usableStartTime'] <= $today) && ($today <= $v['usableEndTime'])) { //先确定优惠券的可用日期 $keyOut = $v['couponAmount'] . "-" . $v['orderAmount']; //提取内部一维数组的key(couponAmount orderAmount)作为外部数组的键 if (array_key_exists($keyOut, $arrWish)) { //展现最先到期的优惠券 if (intval($arrWish[$keyOut]['usableEndTime']) > intval($v['usableEndTime'])) { $arrWish[$keyOut] = $v; //如果原来数组中结束时间大的话,就交换值 } continue; } $arrWish[$keyOut] = $v; //实现二维数组唯一性 } continue; } return $arrWish; } $arrWant = getArrayUniqueByKey($arrCoupon); print_r($arrWant); ?>
输出结果:
Array( [100-800] =>Array ( [couponCode] => 3033323852301057 [usableStartTime] => 1439740800[usableEndTime] => 1440768100 [couponAmount] => 100 [orderAmount] =>800 ) [200-800]=>
Array ( [couponCode] => 3033323852301060 [usableStartTime] =>1439740800 [usableEndTime] => 1440758100 [couponAmount] => 200 [orderAmount]=> 800 ) )
相关文章推荐
- Thinkphp学习笔记
- thinkphp 数据库设置前缀问题 联合查询
- php 出现 500 Internal Server Error错误问题解决
- PHP 基础
- E9天嵌i.mx6q的nfs和tftp环境搭建
- windows下安装php性能分析工具XHProf
- 解决phpcms 后台更新提交更新目录出现PHP has encountered a Stack overflow错误
- Yii的where方法使用大全
- getAttribute()和getParameter()方法区别
- php设置时区和获取当前时间
- Php防跨站分析
- php获取客户端真实IP 防止代理和作弊
- php获得ip地址
- Ubuntu 上安装ftp服务器 vsftpd
- EditPlus常用快捷键
- Yii Framework2.0开发教程(5)数据库mysql性能
- getAttribute 和 getParameter的区别
- php基础------SESSION
- 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5)支持。
- php各类hash算法长度及性能