PHP獲取中文字符拼音首字母

在項目中遇到需要把游戲進行字母排序,于是百度到一個格式化的首字母的方法。

    /*** @name php獲取中文字符拼音首字母* @param $str* @return null|string*/public function getFirstCharter($str){if (empty($str)) {return '';}$fchar = ord($str{0});if ($fchar >= ord('A') && $fchar <= ord('z')) {return strtoupper($str{0});}$s1 = iconv('UTF-8', 'gb2312', $str);$s2 = iconv('gb2312', 'UTF-8', $s1);$s = $s2 == $str ? $s1 : $str;$asc = ord($s{0}) * 256 + ord($s{1}) - 65536;if ($asc >= -20319 && $asc <= -20284) {return '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 '其他';}

上面的過濾只能過濾到一部分,由于使用中文作為key的時候可能會有各種問題,于是我進行了再排序過濾。

    /*** 格式化游戲專區* Author LHC* DateTime 2017-06-04T15:48:59+0800*/public function formatGameCharter($gameData){if (empty($gameData)) {return $gameData;}$keyArr = [];$gameZone = [];foreach ($gameData as $game) {$key = $this->getFirstCharter($game['name']);if (in_array($key, $keyArr)) {$gameZone[$key]['key'] = $key;$gameZone[$key]['list'][] = ['gameId' => intval($game['id']),'appId' => intval($game['appId']),'gameName' => $game['name'],];} else {$keyArr[] = $key;}}array_multisort($gameZone);$gameZone = array_values($gameZone);return $gameZone;}

也有一種辦法是先把26個字母跟其他先組合好一個數組,再遍歷插入數組里面,這樣做的不好的地方我覺得是如果某個字母下面的游戲為空時,該字母下面空蕩蕩的不好看,當然還是要看實際需求,如果你覺得可以解決你的問題,也可以那樣做。

轉載于:https://www.cnblogs.com/ailhc/p/6940762.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252562.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Array類型

一、轉換方法 toString() 調用數組的toString()方法會返回由數組中每個值的字符串形式拼接而成的一個以逗號分割的字符串 valueOf() 返回的還是數組 實際上&#xff0c;為了創建這個字符串會調用數組每一項的toString()方法 二、棧方法 push() pop() 只發生在棧的頂部 三…

Create a Service Catalog Request via REST API

http://wiki.servicenow.com/index.php?titleUseful_Catalog_Scripts#Eureka http://wiki.servicenow.com/index.php?titleService_Catalog_Script_API#gsc.tab0 Service Catalog APIhttps://docs.servicenow.com/bundle/istanbul-servicenow-platform/page/integrate/inboun…

MYSQL和JAVA(課堂筆記)

MYSQL  數據庫管理工具 JAVA    編程語言 數據庫驅動&#xff08;JAVA和MYSQL對接方式&#xff09; 到官網上下載驅動    加載驅動 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement;public class S…

解密昇騰AI處理器--Ascend310簡介

Ascend310 AI處理器規格 Ascend310 AI處理器邏輯架構 昇騰AI處理器本質上是一個片上系統&#xff08;System on Chip&#xff0c;SoC&#xff09;&#xff0c;主要可以應用在和圖像、視頻、語音、文字處理相關的應用場景。其主要的架構組成部件包括特制的計算單元、大容量的存儲…

銀盒子掃碼下單在線訂單開啟商品售賣時段使用說明

1&#xff0c;登陸管理員賬號&#xff0c;子賬號下&#xff0c;配置管理--店鋪配置--掃碼下單Tab頁&#xff0c;是否開啟商品售賣時段&#xff0c;選擇“是” 2&#xff0c;在商家后臺登陸相應的子賬號&#xff0c;在店鋪管理--商品售賣時段里配置售賣時間以及相應時段售賣的商…

使用pandas時遇到ValueError: numpy.dtype has the wrong size, try recompiling

[問題]使用pandas時遇到ValueError: numpy.dtype has the wrong size, try recompiling [原因] 這是因為 Python 包的版本問題&#xff0c;例如安裝了較舊版本的 Numpy&#xff0c;但安裝了較新版本的 Pandas。 [解決方法] 查看Numpy版本號 python -c "import numpy; prin…

『Python基礎-12』各種推導式(列表推導式、字典推導式、集合推導式)

# 『Python基礎-12』各種推導式&#xff08;列表推導式、字典推導式、集合推導式&#xff09; 推導式comprehensions&#xff08;又稱解析式&#xff09;&#xff0c;是Python的一種獨有特性。推導式是可以從一個數據序列構建另一個新的數據序列的結構體。 共有三種推導&#x…

海思芯片選型表匯總

海思芯片選型表匯總_「違規用戶」的博客-CSDN博客_海思芯片型號大全

Docker中未指定掛載點容器間volume卷的數據共享

一 背景 在實際使用過程中&#xff0c;我們可能會經常遇到容器間數據共享的情況&#xff0c;怎么處理呢&#xff1f;通過 docker 命令中的一些選項&#xff0c;我們即可完成容器間的數據共享。 二 實驗步驟 2.1 創建容器 容器一&#xff1a;gysl-1 [rootdev ~]# docker run -it…

為什么早上和傍晚的太陽總是紅色,而中午的大陽卻是黃白色?

由太陽光本質決定&#xff0c;但會受環境影響。在地球上和火星上看到的太陽光也是有區別的&#xff0c;和太氣層物質及厚薄也有關系。太陽光是由赤橙黃綠青藍紫七色光組成的復合光是白色光。 在日出和日落的時候&#xff0c;地平線上所透過的大氣層厚度&#xff0c;一般要比白…

js把日期字符串轉換成時間戳

//獲取當前時間&#xff1a; var myDate new Date();//當前時間 var year myDate.getFullYear();//當前年份 var month myDate.getMonth() 1;//當前月份 var day myDate.getDate();//當前日 myDate.getYear(); //獲取當前年份(2位) myDate.getFullYear(); …

VS2008中開發智能設備程序的一些總結

原文鏈接&#xff1a;http://blog.csdn.net/citybug_nj/article/details/2598705 程序中包括四個部分&#xff1a; 系統配置這個部分用來配置系統中的相關參數&#xff0c;參數包括數據庫信息和串口的配置信息。這部分的主要技術是XML文件的讀取和寫入。 數據下載從數據庫中下載…

go語言值得學習的開源項目推薦

谷歌官方維護了一個基于go語言的開源項目列表&#xff1a; https://github.com/golang/go/wiki/Projects 其中有非常多的優秀項目值得學習&#xff0c;有幾百行代碼適合新手閱讀的項目&#xff0c;也有大型如nsq、docker等的項目。 下面推薦幾款適合學習的項目&#xff1a; 1、…

部分Nand flash uboot 命令詳解

nand info & nand device顯示flash的信息&#xff1a; DM365 :>nand info Device 0: NAND 32MiB 3,3V 8-bit, sector size 16 KiB DM365 :>nand device Device 0: NAND 32MiB 3,3V 8-bitnand read(.oob) addr off size 不管是讀取data, 使用nand read&#xff0c;還是…

java7

第八章 數組 1.數組的聲明定義 數據類型[]變量名 new 數據類型[長度]; 列&#xff1a;int[]ary new int[5]; 2.取值&#xff0c;賦值 取值&#xff1a;數據名[下標]; 列&#xff1a;int a ary[1]; 賦值&#xff1a;變量數據名[…

BZOJ 3564 信號增幅儀

題目鏈接&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id3564 題意&#xff1a;給出平面上n個點&#xff0c;畫出一個橢圓&#xff0c;橢圓的長軸是短軸的p倍&#xff0c;且長軸的方向為x軸逆時針旋轉a度。求這個橢圓短軸的最小值使得可以覆蓋所以點。 思路&…

CentOS 7 搭建JAVA環境

安裝環境&#xff1a; LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.3.1611 (Core) Release: 7.3.1611 Codename: Core 開始 運行java -version 檢查系統是否安裝JRE 或JDK&#xff0c;有則卸載系統自帶JAVA包輸…

串口波形分析

UART口發出數據按字節發送&#xff0c;發送數據8bit&#xff0c;實際量出波形為10bit&#xff0c;軟件底層驅動會自動加上起始位和停止位各1bit&#xff0c;起始位為0&#xff0c;停止位為1。下圖為用串口工具發送的數據和用示波器所量波形。 發送數據&#xff1a;0x34 0x43 示…

SpringBoot之MongoTemplate的查詢可以怎么耍

學習一個新的數據庫&#xff0c;一般怎么下手呢&#xff1f;基本的CURD沒跑了&#xff0c;當可以熟練的增、刪、改、查一個數據庫時&#xff0c;可以說對這個數據庫算是入門了&#xff0c;如果需要更進一步的話&#xff0c;就需要了解下數據庫的特性&#xff0c;比如索引、事物…

這可能是我見過最詳細的快速排序!

關于快速排序&#xff0c;網上&#xff0c;和維基都有完成的解釋&#xff0c;他們都是。。。。。。&#xff0c;俺覺得都是&#xff0c;太過于總結話語在概述一些東西&#xff1b; 而我卻從最本質的東西&#xff0c;一步一步的深入&#xff1b;在深入的學習過程中&#xff0c;我…