PHP 快速排序 与二维数组排序
1、快速排序
function quick_sort($arr) { //判断参数是否是一个数组 if(!is_array($arr)) return false; //递归出口:数组长度为1,直接返回数组 $length = count($arr); if($length<=1) return $arr; //数组元素有多个,则定义两个空数组 $left = $right = array(); //使用for循环进行遍历,把第一个元素当做比较的对象 for($i=1; $i<$length; $i++) { //判断当前元素的大小 if($arr[$i]>$arr[0]){ $left[]=$arr[$i]; }else{ $right[]=$arr[$i]; } } //递归调用 $left=quick_sort($left); $right=quick_sort($right); //将所有的结果合并 return array_merge($left,array($arr[0]),$right); }
2、二维数据排序
function dump($var, $exit = true) {
echo '<pre>';
print_r ( $var );
echo '</pre>';
if ($exit) {
die ();
}
}
/**
* 多维数组排序,第一个参数需要排序的数组,第二个参数需要排序的字段,第三个参数是排序方式
* 例1: array_orderby($list, 'age', SORT_DESC);
* 例2:$list = array_orderby($list, 'age', SORT_ASC(4), 'name', SORT_DESC(3));
* @return mixed
*/
function array_orderby()
{
$args = func_get_args();
$data = array_shift($args);
foreach ($args as $n => $field) {
if (is_string($field)) {
$tmp = array();
foreach ($data as $key => $row)
$tmp[$key] = $row[$field];
$args[$n] = $tmp;
}
}
$args[] = &$data;
call_user_func_array('array_multisort', $args);
return array_pop($args);
}
//array_orderby用法 $list = [ [ 'name' => 'abc', 'age' => 19, ], [ 'name' => 'ddd', 'age' => 13, ], [ 'name' => 'bb', 'age' => 29, ], [ 'name' => 'cc', 'age' => 21, ], [ 'name' => 'dc', 'age' => 21, ], ]; $list = array_orderby($list, 'age', SORT_ASC, 'name', SORT_DESC); dump($list);
http://www.sgfoot.com/view/161