按首字母分组排序及二维数组按键值排序
PHP 的精髓之一是什么? 数组! 数组完的不 6 根本不能算会 PHP。
/** * 按照 字母 分组 并 排序 * @param {Array} $list ; 需要 排序的 数据, 一维数组 * @param {string} $field ; 排序 需要 依据 的字段,该字段 必须为 字母 */ public function data_letter_sort($list, $field) { $resault = array(); foreach( $list as $key => $val ){ // 首字母 转 大写英文 $letter = strtoupper( mb_substr($val[$field], 0, 1) ); // 是否 大写 英文 字母 if( !preg_match('/^[A-Z]+$/', $letter) ){ $letter = '#'; } // 创建 字母 分组 if( !array_key_exists($letter, $resault) ){ $resault[$letter] = array(); } // 字母 分组 添加 数据 Array_push($resault[$letter], $val); } // 依据 键名 字母 排序,该函数 返回 boolean ksort($resault); // 将 # 分组 放到 最后 $arr_last = $resault['#']; unset($resault['#']); $resault['#'] = $arr_last; return $resault; }
支持区分中文,无法识别的全部会放在 # 分组里面,你学废了吗
二维数组按键值排序
/** * 二维数组根据某个字段排序 * @param array $array 要排序的数组 * @param string $keys 要排序的键字段 * @param string $sort 排序类型 SORT_ASC SORT_DESC * @return array 排序后的数组 */ function arraySort($array, $keys, $sort = SORT_DESC) { $keysValue = []; foreach ($array as $k => $v) { $keysValue[$k] = $v[$keys]; } array_multisort($keysValue, $sort, $array); return $array; }
二维数组按指定键值分组
/** * 二维数组按指定字段分组 * @param $arr * @param $key * @return array */ function array_group_by($arr, $key) { $grouped = []; foreach ($arr as $value) { $grouped[$value[$key]][] = $value; } if (func_num_args() > 2) { $args = func_get_args(); foreach ($grouped as $key => $value) { $parms = array_merge([$value], array_slice($args, 2, func_num_args())); $grouped[$key] = call_user_func_array('array_group_by', $parms); } } return $grouped; }
评论