Advertisement

thinkphp 根据拼音首字母全国城市排序

阅读量:

/**

  • 二维数组根据首字母分组排序
  • @param array $data 二维数组
  • @param string $targetKey 首字母的键名
  • @return array 根据首字母关联的二维数组
    */
    public function groupByInitials(array data, targetKey = 'name')
    {
    data = array_map(function (item) use (targetKey) { return array_merge(item, [
    'initials' => this->getInitials(item[targetKey]), ]); }, data);
    data = this->sortInitials(data); return data;
    }

/**

  • Alphabetically sorted
  • @param array$data
  • @return array
    */
    public function sortInitials(arraydata) { sortData = [];
    for (each (data as key => value)) { if (!isset(sortData[value['initials']])) { sortData[value['initials']] = []; } [sortData[value['initials']], []] = [value, []];
    }
    ksort(sortData); return sortData;
    }

/**

  • 获取首字母
  • @param string $str 汉字字符串
  • @return string 首字母
    */
    public function getInitials(str) { if (empty(str)) {return '';}
    fchar = ord(str{0});
    if (fchar >= ord('A') && fchar <= ord('z')) {
    return strtoupper($str{0});
    }

uf8to_gbk = iconv(str, 'GBK', 'UTF-8');
gbkto_utf8 = iconv(uf8to_gbk, 'UTF-8', 'GBK');
s = (gbkto_utf8 == str) ? uf8to_gbk : str; asc_val = ord(s[0]) << 8 | ord(s[1]) - 0x10000;
if (-0x7FFF <= asc_val && asc_val <= -0x7FE4) {
return \u{A};
}

if (asc >= -20283 && asc <= -19776) {
return 'B';
}

if (asc >= -19775 && asc <= -19219) {
return 'C';
}

if (asc >= -19218 && asc <= -18711) {
return 'D';
}

if (asc >= -18710 && asc <= -18527) {
return 'E';
}

if (asc >= -18526 && asc <= -18240) {
return 'F';
}

if (asc >= -18239 && asc <= -17923) {
return 'G';
}

if (asc >= -17922 && asc <= -17418) {
return 'H';
}

if (asc >= -17417 && asc <= -16475) {
return 'J';
}

if (asc >= -16474 && asc <= -16213) {
return 'K';
}

if (asc >= -16212 && asc <= -15641) {
return 'L';
}

if (asc >= -15640 && asc <= -15166) {
return 'M';
}

if (asc >= -15165 && asc <= -14923) {
return 'N';
}

if (asc >= -14922 && asc <= -14915) {
return 'O';
}

if (asc >= -14914 && asc <= -14631) {
return 'P';
}

if (asc >= -14630 && asc <= -14150) {
return 'Q';
}

if (asc >= -14149 && asc <= -14091) {
return 'R';
}

if (asc >= -14090 && asc <= -13319) {
return 'S';
}

if (asc >= -13318 && asc <= -12839) {
return 'T';
}

if (asc >= -12838 && asc <= -12557) {
return 'W';
}

if (asc >= -12556 && asc <= -11848) {
return 'X';
}

if (asc >= -11847 && asc <= -11056) {
return 'Y';
}

if (asc >= -11055 && asc <= -10247) {
return 'Z';
}

return null;
}
public function initialscity(){

// 按首字母排序
$cityName = Db::query("select id,title,domain,pinyin from agent where status=1 order by convert(title using gb2312) asc");

data = this->groupByInitials(cityName, 'pinyin'); dump(data);
}

全部评论 (0)

还没有任何评论哟~