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

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

/**
 * 多维数组自然排序
 * @author wang@rehiy.com
 * @param array array 待排序数组
 * @param stringby,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])) { returnrs; }
    }
    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);

“PHP多维数组根据字段自然排序”的2个回复

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

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注