zoukankan      html  css  js  c++  java
  • php 将一个或多个二维数组组合成一个二维数组并根据某个字段排序排序

    最近再写项目的时候,碰到一个问题:如何将一个或多个二维数组组合成一个二维数组并根据某个字段排序排序;实在是想不到哪个php库中有哪个函数能实现,只能自己写一个了,将代码写出来后,发现自己的代码繁琐,并且不宜封装成一个函数;经过跟请教同事之后,终于将代码精简并封装好;废话少说,请看下面代码,如有疑问,请评论。

    //例:将以下三个数组合并成一个数据,并以 "sort" 字段排序
    
    	$a = array(
    		array('sort'=>0),
    		array('sort'=>2),
    		array('sort'=>4),
    	);
    	$b = array(
    		array('sort'=>1),
    		array('sort'=>3),
    		array('sort'=>5),
    	);
    	$c = array(
    		array('sort'=>1),
    		array('sort'=>3),
    		array('sort'=>5),
    	);
    
    	$e = sortDataByField('sort',1,$a,$b,$c);
    	print_r($e);
    	exit;
    /**
    * 将多个二维数组组合成一个二维数组并根据某个字段排序排序
    * @param  string $fun_args_arr[0] 要排序的字段
    * @param  string $fun_args_arr[1] 排序  0-倒序 1-正序
    * @param  string $fun_args_arr[2,3,4...] 二维数组
    * 注意:
    *   1、参数必须大于三个,
    *   2、第一、第二个参数不能为数组
    *   3、第一个参数必须包含再后面的数组中
    */
    function sortDataByField(){
    
        $fun_args_arr = func_get_args();//将传进来的数据整合成一个数组
        $count = func_num_args(); // 统计传进来的数据个数
        if($count <3){
            exit("Parameter error: subter 3 parameters");
        }
        $field = $fun_args_arr[0];//要排序的字段
        $sort = $fun_args_arr[1];// 0-倒序  1-正序
        if(is_array($field) || is_array($sort)){
            exit("Parameter 1 or parameter 2 cannot be an array");
        }
        $ret = $fun_args_arr[2];
        
        //将多个二维数组组合成一个二维数组
        for($i=3;$i < $count;$i++ ){
            foreach($fun_args_arr[$i] as $k=>$v) {
                $ret[] = $v;
                // array_push($ret,$v);
            }
        }
        //排序
        for($i=0;$i < count($ret);$i++){
            for($j=0;$j < $i;$j++){
                if( !isset($ret[$i][$field]) || !isset($ret[$j][$field])){
                    exit("Parameter error: $field is not defined");
                }
                $a = $ret[$i][$field];
                $b = $ret[$j][$field];
                if($sort ^ $a-$b > 0){// ^ 异或运算符
                    $temp1 = $ret[$i];
                    $ret[$i] = $ret[$j];
                    $ret[$j] = $temp1;
    		$temp = $a;
                    $ret[$i][$field] = $b;
                    $ret[$j][$field] = $temp;
                }
            }
        }
        return $ret;
    }
    

      

      

  • 相关阅读:
    配置管理-SVN使用指南-Linux
    配置管理-SVN权限详解
    配置管理-SVN使用指南
    Unity3d之Mecanim(新版动画系统)
    Unity3d之Animation(动画系统)
    iTween基础之iTweenPath(自定义路径移动)
    iTween基础之Color(变换颜色)
    unity工具IGamesTools之批量生成帧动画
    unity2d之2d帧动画创建
    iTween基础之Fade(淡入淡出)
  • 原文地址:https://www.cnblogs.com/zwb121/p/8615439.html
Copyright © 2011-2022 走看看