You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.0 KiB
91 lines
3.0 KiB
<?php
|
|
|
|
namespace app\common\lib\pinyin;
|
|
|
|
/**
|
|
* 中文转拼音类.
|
|
*/
|
|
class PinyinNumber
|
|
{
|
|
protected static $pinyin = [0 => 'ling', 1 => 'yi', 2 => 'er', 3 => 'san', 4 => 'si', 5 => 'wu', 6 => 'liu', 7 => 'qi', 8 => 'ba', 9 => 'jiu'];
|
|
|
|
protected static $unit = ['', 'shi', 'bai', 'qian', 'wan', 'shiwan', 'baiwan', 'qianwan', 'yi'];
|
|
|
|
protected static $zh_pinyin = [0 => '零', 1 => '一', 2 => '二', 3 => '三', 4 => '四', 5 => '五', 6 => '六', 7 => '七', 8 => '八', 9 => '九'];
|
|
|
|
protected static $zh_unit = ['', '十', '百', '千', '万', '十万', '百万', '千万', '亿'];
|
|
|
|
/**
|
|
* 获取数字的拼音
|
|
* @param $number
|
|
* @param $strtoupper // 返回大写
|
|
* @return string
|
|
*/
|
|
public static function getPinyin($number,$strtoupper = false)
|
|
{
|
|
$number = strval($number); // 将数字转换为字符串
|
|
$length = strlen($number);
|
|
$pinyinStr = '';
|
|
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$digit = intval($number[$i]);
|
|
|
|
if ($digit != 0) {
|
|
// 处理万以上的位数
|
|
if ($length - $i > 4) {
|
|
$pinyinStr .= self::$pinyin[$digit] . self::$unit[$length - $i - 1];
|
|
// 处理万位之间的零
|
|
if ($digit == 0 && $number[$i + 1] != 0) {
|
|
$pinyinStr .= 'ling';
|
|
}
|
|
} else {
|
|
$pinyinStr .= self::$pinyin[$digit] . self::$unit[$length - $i - 1];
|
|
}
|
|
} else {
|
|
// 处理连续的0
|
|
if ($i == 0 || $number[$i] != 0) {
|
|
$pinyinStr .= self::$pinyin[$digit];
|
|
}
|
|
}
|
|
}
|
|
if ($strtoupper) $pinyinStr = strtoupper($pinyinStr);
|
|
return $pinyinStr;
|
|
}
|
|
|
|
/**
|
|
* 获取数字的汉字
|
|
* @param $number
|
|
* @param $suffix // 后缀
|
|
* @return string
|
|
*/
|
|
public static function getChinese($number,$suffix = '')
|
|
{
|
|
|
|
$number = strval(round($number)); // 将数字转换为字符串
|
|
$length = strlen($number);
|
|
$chineseStr = '';
|
|
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$digit = intval($number[$i]);
|
|
|
|
if ($digit != 0) {
|
|
// 处理万以上的位数
|
|
if ($length - $i > 4) {
|
|
$chineseStr .= self::$zh_pinyin[$digit] . self::$zh_unit[$length - $i - 1];
|
|
// 处理万位之间的零
|
|
if ($digit == 0 && $number[$i + 1] != 0) {
|
|
$chineseStr .= '零';
|
|
}
|
|
} else {
|
|
$chineseStr .= self::$zh_pinyin[$digit] . self::$zh_unit[$length - $i - 1];
|
|
}
|
|
} else {
|
|
// 处理连续的0
|
|
if ($i == 0 || $number[$i] != 0) {
|
|
$chineseStr .= self::$zh_pinyin[$digit];
|
|
}
|
|
}
|
|
}
|
|
return $chineseStr . $suffix;
|
|
}
|
|
}
|
|
|