2012年11月

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

/**
 * 多维数组自然排序
 * @author mail@anrip.com
 * @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);