/*** 二维数组多字段排序.** @param array $sort:['a'=>'desc','b'=>'asc','d'=>'desc']** @return array*/function sortArrByManyField(array $array, $sort = []){if (!$sort) {return $array;}$array = array_values($array);for ($i=0; $i < count($array); ++$i) {foreach ($sort as $key => $order) {if (!isset($array[$i + 1])) {break 2;}if ('desc' == strtolower($order)) {$bool = $array[$i][$key] >= $array[$i + 1][$key];} else {$bool = $array[$i][$key] <= $array[$i + 1][$key];}if (!$bool) {foreach ($sort as $k => $o) {// 检查交换位置后,判断之前的大小关系结果是否依然成立,不再判断当前key,只比较$key之前的排序是否正确if ($k == $key) {break;}if ('desc' == strtolower($o)) {$bool = $array[$i + 1][$k] >= $array[$i][$k];} else {$bool = $array[$i + 1][$k] <= $array[$i][$k];}if (!$bool) {// 检查交换位置后,不再满足条件,不交换位置,继续$i+1的循环continue 2;}}// 检查交换位置后,判断之前的大小关系结果是否依然成立,不再判断当前key=>条件依然成立,互换位置$temp = $array[$i + 1];$array[$i + 1] = $array[$i];$array[$i] = $temp;$i = -1; // 控制循环指针,下次最外层依旧从0开始break;}}}return $array;}