当前位置:首页 > PHP教程 > php数组 > 列表

PHP 二维数组排序保持键名不变的方法

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-23 09:36:28 浏览: 评论:0 

对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇。

废话不多言,我们看个实例:

  1. <?php 
  2.  
  3. $data = array
  4.  
  5.     1001 => array
  6.  
  7.         'age' => 22, 
  8.  
  9.         'name' => '鸠摩智' 
  10.  
  11.     ), 
  12.  
  13.     1007 => array
  14.  
  15.         'age' => 21, 
  16.  
  17.         'name' => '慕容复' 
  18.  
  19.     ), 
  20.  
  21.     1004 => array
  22.  
  23.         'age' => 27, 
  24.  
  25.         'name' => '乔帮主' 
  26.  
  27.     ) 
  28.  
  29. ); 
  30.  
  31. = array_column(, 'age'(, SORT_ASC, (); 

PHP 二维数组排序保持键名不变的方法

细心的朋友会看到,键名重置了,键名从0开始,显然这可能不是我们想要的结果,那如何保持键名不变?

我们再看个示例:

  1. $data = array(    1001 => array(        'age' => 22, 
  2.  
  3.         'name' => '鸠摩智' 
  4.  
  5.     ), 
  6.  
  7.     1007 => array(        'age' => 21, 
  8.  
  9.         'name' => '慕容复' 
  10.  
  11.     ), 
  12.  
  13.     1004 => array(        'age' => 27, 
  14.  
  15.         'name' => '乔帮主' 
  16.  
  17.     ) 
  18.  
  19. );//根据字段age对数组$data进行降序排列$data = arraySort($data, "age", "desc" );print_r($data);/** 
  20.  
  21.  * @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序 
  22.  
  23.  * @param array $arr 将要排序的数组 
  24.  
  25.  * @param string $keys 指定排序的key 
  26.  
  27.  * @param string $type 排序类型 asc | desc 
  28.  
  29.  * @return array */function arraySort($arr$keys$type = 'asc'
  30.  
  31. {    $keysvalue = $new_array = array();    foreach ($arr as $k => $v) {        $keysvalue[$k] = $v[$keys]; 
  32.  
  33.     }    if ($type == 'asc') {        natsort($keysvalue); 
  34.  
  35.     }    if ($type == 'desc') {        natsort($keysvalue);        $keysvalue = array_reverse($keysvalue, TRUE); // 将原数组中的元素顺序翻转,如果第二个参数指定为 true,则元素的键名保持不变    }    foreach ($keysvalue as $k => $v) {        $new_array[$k] = $arr[$k]; 
  36.  
  37.     }    return $new_array
  38.  

这里我们也可以精简下arraySort函数,处理结果相同:

  1. /** 
  2.  
  3.  * @desc arraySort php二维数组排序 按照指定的key 对数组进行自然排序 
  4.  
  5.  * @param array $arr 将要排序的数组 
  6.  
  7.  * @param string $keys 指定排序的key 
  8.  
  9.  * @param string $type 排序类型 asc | desc 
  10.  
  11.  * @return array */function arraySort($arr$keys$type = 'asc'
  12.  
  13. {    $keysvalue = $new_array = array();    foreach ($arr as $k => $v) {        $keysvalue[$k] = $v[$keys]; 
  14.  
  15.     }    $type == 'asc' ? asort($keysvalue) : arsort($keysvalue);    foreach ($keysvalue as $k => $v) {        $new_array[$k] = $arr[$k]; 
  16.  
  17.     }    return $new_array
  18.  

从上面的结果我们看到:

PHP 二维数组排序保持键名不变的方法

键名保持了不变,实现的原理很简单,先取出键名,然后对键名排序,再根据对应的键名赋值组成新数组返回。

大家可以看到,这里我们主要用到了php的几个核心的排序函数

asort() 对关联数组按照键值进行升序排序。

arsort()对关联数组按照键值进行降序排序。

natsort() 实现了“自然排序”,即数字从 1 到 9 的排序方法,字母从 a 到 z 的排序方法,短的优先。数组的索引与单元值保持关联,

注意:在自然排序算法中,数字 2 小于 数字 10。在计算机排序算法中,10 小于 2,因为 "10" 中的第一个数字小于 2。

Tags: PHP二维数组排序

分享到: