php二维数组多元素排序小编介绍过很多了,只是今年看到这个例子有一点区别了所以小编为各位整理了一下,希望这个排序算法能够帮助到各位。
写个二维数组的多元素排序,多元素排序类似sql中的order by sort,date,下面代码考虑性能问题,只涉及2个元素进行排序。
代码区:
<?php function multipleArraySort($old_arr, $arr1, $arr2) { //排序第一个元素 $old_arr = array_sort($old_arr, $arr1[0], $arr1[1]); $temp_array = $new_temp_array = array(); foreach ($old_arr as $k => $v) { $key_count = count($old_arr) - 1; //第一个元素数相等,放入临时数组 if ($v[$arr1[0]] == $old_arr[$k - 1][$arr1[0]] || empty($temp_array)) { $temp_array[$k] = $v; } if (($v[$arr1[0]] != $old_arr[$k - 1][$arr1[0]] && !empty($temp_array)) || $key_count == $k) { //添加最新元素 $temp_array[$k] = $v; //数组大于1时,进行排序处理 if (count($temp_array) > 1) { if ($key_count != $k) { //删除最后一个(与上一个不相等元素) unset($temp_array[$k]); } //不是最后或者最后相同,进行排序 if ($key_count != $k || $v[$arr1[0]] == $old_arr[$k - 1][$arr1[0]]) { //排序第二个元素 $temp_array = array_sort($temp_array, $arr2[0], $arr2[1]); } //排序后把排序的数组,插入原数组排序前位置 $count = count($new_temp_array) == 0 ? 0 : count($new_temp_array); foreach ($temp_array as $val_t) { $new_temp_array[$count] = $val_t; $count++; } //写入新数组后清空原数组 $temp_array = array(); //添加最新元素 $temp_array[$k] = $v; } } } return $new_temp_array; } //根据数组元素排序 function array_sort($arr, $keys, $type = 'asc') { $keysvalue = $new_array = array(); //获取元素值,生成新数组 foreach ($arr as $k => $v) { $keysvalue[$k] = $v[$keys]; } //排序,默认为正序 if ($type == 'asc') { asort($keysvalue); } else { arsort($keysvalue); } reset($keysvalue); $count_s = 0; //恢复键值 foreach ($keysvalue as $k => $v) { $new_array[$count_s] = $arr[$k]; $count_s++; } return $new_array; } //调用方法: $old_arr = array( array( 'id' => 1, 'sort' => 1, 'date' => '1405648791' ) , array( 'id' => 2, 'sort' => 1, 'date' => '1405649791' ) , array( 'id' => 3, 'sort' => 2, 'date' => '1405647791' ) , ); $arr1 = array( 'sort', 'desc' ); $arr2 = array( 'date', 'desc' ); $newArr = multipleArraySort($old_arr, $arr1, $arr2); var_dump($newArr);
//打印结果: