按首字母分组排序及二维数组按键值排序

流氓凡 技术分享 2020-07-15 6.3 K 0

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;
}


评论