加入收藏 | 设为首页 | 会员中心 | 我要投稿 平凉站长网 (https://www.0933zz.com.cn/)- 图像处理、语音技术、媒体智能、运维、低代码!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

简单的php二维数组多元素排序实例

发布时间:2022-07-25 08:56:42 所属栏目:PHP教程 来源:互联网
导读:php二维数组多元素排序小编介绍过很多了,只是今年看到这个例子有一点区别了所以小编为各位整理了一下,希望这个排序算法能够帮助到各位. 写个二维数组的多元素排序,多元素排序类似sql中的order by sort,date,下面代码考虑性能问题,只涉及2个元素进行排序. 代
  php二维数组多元素排序小编介绍过很多了,只是今年看到这个例子有一点区别了所以小编为各位整理了一下,希望这个排序算法能够帮助到各位.
 
  写个二维数组的多元素排序,多元素排序类似sql中的order by sort,date,下面代码考虑性能问题,只涉及2个元素进行排序.
 
  代码区:
 
  function multipleArraySort($old_arr,$arr1,$arr2){
  //排序第一个元素
  $old_arr = array_sort($old_arr,$arr1[0],$arr1[1]);
  $temp_array = $new_temp_array = array();
  foreach($old_arr as $k => $v){
  $key_count = count($old_arr)-1;
  //第一个元素数相等,放入临时数组
  if($v[$arr1[0]] == $old_arr[$k-1][$arr1[0]] || emptyempty($temp_array)){
  $temp_array[$k] = $v;  
  }
  if(($v[$arr1[0]] != $old_arr[$k-1][$arr1[0]] && !emptyempty($temp_array)) || $key_count == $k){
  //添加最新元素
  $temp_array[$k] = $v;  
  //数组大于1时,进行排序处理
  if(count($temp_array)>1){
  if($key_count != $k){
  //删除最后一个(与上一个不相等元素)
  unset($temp_array[$k]);
  }
  //不是最后或者最后相同,进行排序
  if($key_count != $k || $v[$arr1[0]] == $old_arr[$k-1][$arr1[0]]){
  //排序第二个元素
  $temp_array = array_sort($temp_array,$arr2[0],$arr2[1]);
  }
  //排序后把排序的数组,插入原数组排序前位置
  $count = count($new_temp_array)==0 ? 0 : count($new_temp_array);
  foreach($temp_array as $val_t){
  $new_temp_array[$count] = $val_t;
  $count++;
  }
  //写入新数组后清空原数组
  $temp_array = array();
  //添加最新元素
  $temp_array[$k] = $v;  
  }
  }
  }
  return $new_temp_array;
  }
  //根据数组元素排序
  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);
  $count_s = 0;
  //恢复键值
  foreach ($keysvalue as $k=>$v){
  $new_array[$count_s] = $arr[$k];
  $count_s++;
  }  //phpfensi.com
  return $new_array;  
  }
  调用方法:
 
  $old_arr = array(
  array('id'=>1,'sort'=>1,'date'=>'1405648791'),
  array('id'=>2,'sort'=>1,'date'=>'1405649791'),
  array('id'=>3,'sort'=>2,'date'=>'1405647791'),
  );
  $arr1 = array('sort','desc');
  $arr2 = array('date','desc');
  $newArr = multipleArraySort($old_arr,$arr1,$arr2);
  var_dump($newArr);

(编辑:平凉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读