PHP 根据某列对二维数组进行排序
解决某列的值相同时,丢失数组的问题。
/**
* 根据某列对二维数组进行排序
* @param array $arr 要排序的数组
* @param string $row 排序依据列
* @param string $type asc表示正序,desc表示倒序,默认值为asc
* @param string $row_type 排序依据列的数据类型,默认为int
* @return array 返回排序好的数组
*/
function array_sort($arr, $row, $type = 'asc',$row_type = 'int'){
$arr_temp = array();
$index = 1;
foreach($arr as $key=>$value){
//存在相同的下标,就更换下标
if(isset($arr_temp[$value[$row]])){
//$value[$row] 的值为数字
if($row_type == 'int'){
$arr_temp[$value[$row]+$index] = $value;
}
//$value[$row] 的值为字符
else{
$arr_temp[$value[$row].$index] = $value;
}
$index++;
}
//不存在相同的下标,就不需要更换下标
else{
$arr_temp[$value[$row]] = $value;
}
}
//按照键名对数组排序,并保持索引关系
if ($type == 'asc'){
ksort($arr_temp);
}elseif($type == 'desc'){
krsort($arr_temp);
}else{
ksort($arr_temp);
}
unset($arr);
$new_arr = array();
foreach ($arr_temp as $key2=>$value2){
$new_arr[] = $value2;
}
unset($arr_temp);
return $new_arr;
}
//例子
$list = array(
array('id'=>1,'name'=>'a','age'=>10),
array('id'=>2,'name'=>'b','age'=>9),
array('id'=>3,'name'=>'c','age'=>8),
array('id'=>4,'name'=>'d','age'=>10),
array('id'=>5,'name'=>'e','age'=>6),
);
$temp = array_sort($list, 'age', 'asc');
echo '<pre>';
var_dump($temp);
die();