PHP如何对数组排序并保持键值不变

 4075

php对数组排序并保持键值不变的方法:首先我们需要取出数组的键名;然后对键名进行排序;最后根据对应的键名进行赋值,组成一个新数组并返回即可。


PHP如何对数组排序并保持键值不变


实现代码:

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

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

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

输出结果:


PHP如何对数组排序并保持键值不变


键名保持了不变,实现的原理很简单,先取出键名,然后对键名排序,再根据对应的键名赋值组成新数组返回。
大家可以看到,这里我们主要用到了php的几个核心的排序函数。

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

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

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

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



TAG标签:
本文网址:https://www.zztuku.com/detail-7945.html
站长图库 - PHP如何对数组排序并保持键值不变
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐