<? $a = array( array('id'=>1,'data'=>'a'), array('id'=>3,'data'=>'c'), array('id'=>2,'data'=>'d') ); /* function comp_by_id_desc($a,$b){ if ($a['id']>$b['id']) return 1; if ($a['id']<=$b['id']) return -1; } function comp_by_id_ase($a,$b){ if ($a['id']>$b['id']) return 1; if ($a['id']<=$b['id']) return -1; } function comp_by_data_desc($a,$b){ if ($a['data']>$b['data']) return 1; if ($a['data']<=$b['data']) return -1; } function comp_by_data_ase($a,$b){ if ($a['data']>$b['data']) return 1; if ($a['data']<=$b['data']) return -1; } function my_sort(&$arr,$key,$by='desc'){ if($by=='desc'){ usort($arr, 'comp_by_'.$key.'_desc'); } if($by=='ase'){ usort($arr, 'comp_by_'.$key.'_ase'); } } my_sort($a,'data'); var_dump($a); */ function my_sort(&$arr,$key,$by='desc'){ $f1 = 'return ($a["'.$key.'"]>$b["'.$key.'"])?1:-1;'; $f2 = 'return ($a["'.$key.'"]>$b["'.$key.'"])?-1:1;'; if($by=='desc'){ $fn=create_function('$a,$b', $f1); } if($by=='ase'){ $fn=create_function('$a,$b', $f2); } usort($arr, $fn); } my_sort($a,'data'); var_dump($a); ?>
两个版本,第二个跟手册上面的思路相比较,有更大的优势。