function array_sort($array,$key=0,$type="asc") {
  $s = 'if($a['.$key.'] == $b['.$key.']) return 0;';
  if($type == "asc")
    $s .= 'return $a['.$key.'] == $b['.$key.']?1:-1;';
  else
    $s .= 'return $a['.$key.'] == $b['.$key.']?-1:1;';  usort($array,$newfunc);
  return $array;
}
$ar = array(
array(1,3,2,4),
array(3,2,4,1)
);
print_r(array_sort($ar,1));

解决方案 »

  1.   

    没明白array_sort func 中的$a是?
      

  2.   

    多维数组排序时没有预设的方法。因为php的数组是巢状结构,并不通常意义上的数组的行列结构。
    这里使用自定义排序函数:usort
    该函数的第二个参数是自定义的回调函数,传入参数两个,返回值为:-1,0,1之一
    所贴array_sort使用了创建临时函数的函数caerte_function
    展开后是
    function cmd($a,$b) {
      global $k;
      if($a[$k] == $b[$k]) return 0;
      return $a[$k]>$b[$k]?1:-1;
    }
    usort($array,cmd);
    // 数组排序
    function array_sort($array,$key=0,$type="asc") {
      $s = 'if($a['.$key.'] == $b['.$key.']) return 0;';
      if($type == "asc")
        $s .= 'return $a['.$key.'] == $b['.$key.']?1:-1;';
      else
        $s .= 'return $a['.$key.'] == $b['.$key.']?-1:1;';
      $newfunc = create_function('$a,$b',$s);
      usort($array,$newfunc);
      return $array;
    }
    $ar = array(
    array(1,3,2,4),
    array(3,2,4,1)
    );
    print_r(array_sort($ar,1));
      

  3.   

    自己写了一个函数,不过只针对有固定的结构的二位数组。function array_sort($arr,$keys,$type="asc") {
    $keysvalue = array();
    foreach($arr as $key=>$val) {
    $keysvalue[] = $val[$keys];
    }
    if($type=="asc"){
    asort($keysvalue);
    }else {
    rsort($keysvalue);
    }
    reset($keysvalue);
    foreach($keysvalue as $key=>$vals) {
    $keysort[] = $key;
    }
    $new_array = array();
    for($ii=0; $ii<count($keysort); $ii++) {
    $new_array[] = $arr[$keysort[$ii]];
    }
    return $new_array;
    }
    请多多指教