zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

PHP数组排序 根据 多维 自然
2023-06-13 09:15:39 时间

warning: 这篇文章距离上次修改已过225天,其中的内容可能已经有所变动。

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

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