PHP中文播报金额

  由于项目中使用极光推送需要播报用户消费的金额,所以写了以下代码。

前提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;
}

原文地址:https://www.cnblogs.com/sxiangyues/p/7831865.html