PHP 多维数组根据字段自然排序

在写框架的时候遇到了需要根据多维数组元素的一些值排序的问题,用PHP5.3的闭包功能写了这个函数。

/**
 * 多维数组自然排序
 * @author [email protected]
 * @param array $array 待排序数组
 * @param string $by,$b2,b3 排序字段,至少一个
 */
function array_order_by(&$array, $by) {
  $args = func_get_args(); $argn = func_num_args();
  uasort($array, function($a, $b) use($args, $argn) {
    for($i = 1; $i < $argn, $by = $args[$i]; $i++) {
      $rs = strnatcmp(isset($a[$by])?$a[$by]:'', isset($b[$by])?$b[$by]:'');
      if($rs !== 0 || empty($args[$i+1])) { return $rs; }
    }
    return 0;
  });
}

$menu = array (
  array('order' => '2_0', 'data' => '6_name'),
  array('order' => '1_0', 'data' => '19_name'),
  array('order' => '1_0', 'data' => '12_name'),
  array('order' => '1_1_0', 'data' => '1_name'),
  array('order' => '2_1_0', 'data' => '5_name'),
  array('order' => '1_2_0', 'data' => '45_name'),
  array('order' => '1_2_1_0', 'data' => '8_name'),
);

array_order_by($menu, 'order', 'data');
print_r($menu);
文章作者: 若海; 原文链接: https://www.rehiy.com/post/48/; 转载需声明来自技术写真 - 若海

已有 2 条评论

  1. 若海

    说明白些就是 function() use() { } ,这个闭包写法需要5.3以上版本才支持

  2. 若海

    需要用的童鞋们注意,这个函数要求php5.3以上版本,如果需要向下兼容把排序回调函数拆分出来即可。

添加新评论