加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php对多维数组的某个键值排序技巧

发布时间:2022-07-24 11:59:53 所属栏目:PHP教程 来源:互联网
导读:php多维数组排序可以用array_multisort() 函数来处理,array_multisort() 函数可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引. 排序顺序标志: SORT_ASC - 按照上升顺序排序 SORT_D
  php多维数组排序可以用array_multisort() 函数来处理,array_multisort() 函数可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序,关联(string)键名保持不变,但数字键名会被重新索引.
 
  排序顺序标志:
 
  SORT_ASC - 按照上升顺序排序
 
  SORT_DESC - 按照下降顺序排序
 
  排序类型标志:
 
  SORT_REGULAR - 将项目按照通常方法比较
 
  SORT_NUMERIC - 将项目按照数值比较
 
  SORT_STRING - 将项目按照字符串比较
 
  例子1.对多个数组排序,代码如下:
 
  <?php
  $ar1 = array("10", 100, 100, "a");
  $ar2 = array(1, 3, "2", 1);
  array_multisort($ar1, $ar2);
  var_dump($ar1);
  var_dump($ar2);
  ?>
  本例中经过排序后,第一个数组将包含 "10","a",100,100,第二个数组将包含 1,1,"2",3,第二个数组中的项目顺序完全和第一个数组中相应的项目(100 和 100)顺序一致.
 
  但是这些都不可以指定由那个键值进行排名了,下面我就整理了几个函数算法都不错.
 
  示例代码如下:
 
  /**
   * 对多位数组进行排序
   * @param $multi_array 数组
   * @param $sort_key需要传入的键名
   * @param $sort排序类型
   */
  function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) {
  if (is_array($multi_array)) {
  foreach ($multi_array as $row_array) {
  if (is_array($row_array)) {
  $key_array[] = $row_array[$sort_key];
  } else {
  return FALSE;
  }
  }
  } else {
  return FALSE;
  }
  array_multisort($key_array, $sort, $multi_array);
  return $multi_array;
  }
  例子二,代码如下:
 
  function array_sort($arr, $keys, $type = 'asc') {
  $keysvalue = $new_array = array();
  foreach ($arr as $k => $v) {
  $keysvalue[$k] = $v[$keys];
  }//开源软件:phpfensi.com
  if ($type == 'asc') {
  asort($keysvalue);
  } else {
  arsort($keysvalue);
  }
  reset($keysvalue);
  foreach ($keysvalue as $k => $v) {
  $new_array[] = $arr[$k];
  }
  return $new_array;
  }
  例子3,代码如下:
 
  /*
  function:二维数组按指定的键值排序
  author:www.phpfensi.com
  */
  function array_sort($array,$keys,$type='asc'){
  if(!isset($array) || !is_array($array) || emptyempty($array)){
  return '';
  }
  if(!isset($keys) || trim($keys)==''){
  return '';
  }
  if(!isset($type) || $type=='' || !in_array(strtolower($type),array('asc','desc'))){
  return '';
  }
  $keysvalue=array();
  foreach($array as $key=>$val){
  $val[$keys] = str_replace('-','',$val[$keys]);
  $val[$keys] = str_replace(' ','',$val[$keys]);
  $val[$keys] = str_replace(':','',$val[$keys]);
  $keysvalue[] =$val[$keys];
  }
  asort($keysvalue); //key值排序
  reset($keysvalue); //指针重新指向数组第一个
  foreach($keysvalue as $key=>$vals) {
  $keysort[] = $key;
  }
  $keysvalue = array();
  $count=count($keysort);
  if(strtolower($type) != 'asc'){
  for($i=$count-1; $i>=0; $i--) {
  $keysvalue[] = $array[$keysort[$i]];
  }
  }else{
  for($i=0; $i<$count; $i++){
  $keysvalue[] = $array[$keysort[$i]];
  }
  }
  return $keysvalue;
  }
  例如有下列这样一个数组,代码如下:
 
  $array=array(
  0=>array('id'=>8,'username'=>'phpernote'),
  1=>array('id'=>9,'username'=>'com'),
  2=>array('id'=>5,'username'=>'www')
  );
  现在需要将这个二维数组按id升序排列,则:array_sort($array,'id','asc');

(编辑:开发网_郴州站长网)

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

    热点阅读