由于项目中使用极光推送需要播报用户消费的金额,所以写了以下代码。
前提1:播报的音频
前提2:极光推送
解决问题1:中文金额的播报
解决问题2:个十千百万亿及零的播报
如果有更好的方法请留言,大家互相学习哈!
上代码:
private function duqu($total_fee = 0) {
if (empty($total_fee)) return false;
// 设置0十百千万亿
$array = array('0'=>'0', '1'=>'10', '2'=>'29', '3'=>'32', '4'=>'30', '5'=>'10,30', '6'=>'29,30', '7'=>'32,30', '8'=>'31');
// 将金额通过点分割成数组
$number = explode('.', $total_fee);
$data = array();
foreach ($number as $k => $v) {
$arr = str_split($v);
// 点前的运算
if ($k == 0) {
$flag = $kk = 0;
krsort($arr);
foreach ($arr as $k1 => $v1) {
$kk++;
if ($kk == 1 && $v1 != 0) {
$data[$k][] = $v1;
}else if ($v1 != 0) {
if ( $flag != 0 && !empty($data[$k])) {
$data[$k][] = $array[0];
$flag = 0;
} else if ($flag != 0 && empty($data[$k])) {
$flag = 0;
}
if ($v1 == 1 && $k1 == 0 && ($kk-1 == 1)) {
$data[$k][] = $array[$kk-1];
} else {
$data[$k][] = $v1.','.$array[$kk-1];
}
} else {
if ($k1 < 8) {
$flag = $flag + 1;
}
}
}
krsort($data[$k]);
} else { // 点后的运算
foreach ($arr as $k1 => $v1) {
$data[$k][] = $v1;
}
}
$data[$k] = implode(',',$data[$k]);
}
unset($arr);
unset($array);
unset($flag);
unset($kk);
// 添加點并合併
if(empty($data[0])) {
$data[0] = '0,11';
} else if (!empty($data[1])){
$data[0] .= ',11';
}
$res = implode(',',$data);
$res .= ',27'; //元
return $res;
}