PHP二维数组排序

时间:2023-01-11 04:18:42

A. 按照单个key的值来进行排序(针对二维数组)

    /**
* 对二维数组按照某个key的值来进行排序
* @param array $arr
* @param string $field 要排序的字段名称
* @param string $sort 'SORT_ASC'代表升序 'SORT_DESC' 代表降序
*/

public function sortArr($arr, $field, $sort = 'SORT_ASC'){
if(!$field) return $arr;
$fieldArr = array();
foreach($arr as $key => $value){
$fieldArr['field_'.$key] = $value[$field];
}
if($sort == 'SORT_ASC'){
asort($fieldArr, 1);
}else{
arsort($fieldArr, 1);
}
$result = array();
foreach ($fieldArr as $field_key => $value) {
$field = explode('_', $field_key);
$result[] = $arr[$field[1]];
}
return $result;
}

B. 按照两个key的值来进行排序(针对二维数组)

    /**
* 针对两个field且升序的情况, 当返回false时需要换位置
*/

public function keysSort($fieldArr, $arr1, $arr2){
$field1 = $fieldArr[0];
$field2 = $fieldArr[1];
if($arr1[$field1] == $arr2[$field1]){
return $arr1[$field2] > $arr2[$field2];
}else{
return $arr1[$field1] > $arr2[$field1];
}
}

/**
* 对二维数组按照多个key的值来进行排序
* @param array $arr
* @param array $fieldArr 要排序的字段数组,比如array('param1', 'param2');
*/

public function sortArrByKeys($arr, $fieldArr){
for($i=0;$i<count($arr);$i++){
$cmpObj = $arr[$i];
for($j=$i+1;$j<count($arr);$j++){
$flag = $this->keysSort($fieldArr, $cmpObj, $arr[$j]);
if($flag){
$arr[$i] = $arr[$j];
$arr[$j] = $cmpObj;
$cmpObj = $arr[$i];
}
}
}
return $arr;
}