php 数组 按拼音首字母 排序 并分组

PHP 数组 按照拼音 首字母 排序 并排序:

需要排序的数组 格式:

$list = [
    [
        'name' => '张三',
        'py' => 'zhnagsan'
    ],
    [
        'name' => '李四',
        'py' => 'lisi'
    ],
    [
        'name' => '王五',
        'py' => 'wangwu'
    ],
    [
        'name' => '赵六',
        'py' => 'zhaoliu'
    ],
];

$resault = data_letter_sort($list, 'py');

方法 代码 如下:

/**
 * 按照 字母 分组 并 排序
 * 
 * @param {Array} $list ; 需要 排序的 数据, 一维数组
 * @param {string} $field ; 排序 需要 依据 的字段,该字段 必须为 拼音 
 */
function data_letter_sort($list, $field) {
    $resault = array();

    foreach( $list as $key => $val ){
        // 添加 # 分组,用来 存放 首字母不能 转为 大写英文的 数据
        $resault['#'] = array();
        // 首字母 转 大写英文
        $letter = strtoupper( 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;
}

js 数组 按拼音 首字母排序 并分组:点击连接查看

你可能感兴趣的:(php)