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

php之二维数组排序问题

发布:smiling 来源: PHP粉丝网  添加日期:2023-07-02 10:06:48 浏览: 评论:0 

这篇文章主要介绍了php之二维数组排序问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教。

php二维数组排序

测试数据

  1. $arr = [ 
  2.     'a' => ['a' => 11, 'b' => 12, 'c' => 13], 
  3.     'b' => ['a' => 10, 'b' => 13, 'c' => 12], 
  4.     'c' => ['a' => 12, 'b' => 11, 'c' => 10], 
  5. ]; 

通过usort排序

  1. # usort 排序会导致二维数组的key改变(key a,b,c 变成 0,1,2 这种) 
  2. # 如果不在意key的改变可以用这种 
  3. # $arr 是引用 
  4. usort($arr, function ($current, $next) { 
  5.     # 正序排 
  6.     return $current['a'] > $next['a']; 
  7. });       

通过array_multisort排序

  1. $arr = [ 
  2.     'a' => ['a' => 11, 'b' => 12, 'c' => 13], 
  3.     'b' => ['a' => 10, 'b' => 13, 'c' => 12], 
  4.     'c' => ['a' => 12, 'b' => 11, 'c' => 10], 
  5. ]; 
  6. # 以二维数组的a作为比较值 
  7. $key = array_column(array_values($arr), 'a'); 
  8. # 第一个参数需要提供二维数组排序依据 
  9. # 第二个排序方式 SORT_ASC:正序 SORT_DESC:倒序 
  10. # 第三个参数 要排序的二维数组,改动直接操作在该数组上 
  11. # 排序能保证key不改变 
  12. array_multisort($key, SORT_ASC, $arr); 

php二维数组排序算法函数

  1. <?php 
  2. // 二维数组排序算法函数,能够具有通用性,可以调用php内置函数。 
  3. function array_sort(&$arr$order = []){ 
  4.     $result = []; 
  5.     if (emptyempty($arr)) { 
  6.         return $result
  7.     } 
  8.    
  9.     uasort($arrfunction ($a$buse ($order) { 
  10.         foreach ($order as $key => $sort) { 
  11.             array_shift($order); 
  12.             if ($a[$key] == $b[$key]) { 
  13.                 continue
  14.             } 
  15.             if ($sort === 'DESC') { 
  16.                 return ($a[$key] > $b[$key]) ? -1 : 1; 
  17.             } else { 
  18.                 return ($a[$key] > $b[$key]) ? 1 : -1; 
  19.             } 
  20.         } 
  21.         return 0; 
  22.     }); 
  23.    
  24.     foreach ($arr as $value) { 
  25.         $result[] = $value
  26.     } 
  27.    
  28.     return $arr = $result
  29.    
  30. // 测试 
  31. $ps = array
  32.     array('id' => 1, 'name' => 'zhangcan''age' => 13), 
  33.     array('id' => 2, 'name' => 'lisi''age' => 16), 
  34.     array('id' => 3, 'name' => 'wangwu''age' => 17), 
  35.     array('id' => 4, 'name' => 'wangwu''age' => 18), 
  36. ); 
  37. // $ret = array_sort($person, ['name' => 'ASC']); 
  38. $ret = array_sort($ps, ['name'=>'ASC''age'=>'DESC']); 
  39.    
  40. print_r($ret);

Tags: php二维数组排序

分享到: