具體代碼:
<?php
$data = [
'title'=>'狼道',
'num' => '1',
'price' => 56.98,
];
echo json_encode(self::fix_number_precision($data), JSON_UNESCAPED_UNICODE);
exit;
//輸出:{"title":"狼道","num":"1","price":"56.98"}
1、浮點類型數據出現精度問題
解決方案:構造fix_number_precision方法
2、中文字符串轉碼問題
解決方案:參數JSON_UNESCAPED_UNICODE
<?php
/**
* @param $data
* @param int $precision
* @return array|string
* 解決PHP版本7.0+及其以上json_encode函數造成浮點類型數據出現精度問題
*/
private static function fix_number_precision($data, $precision=2)
{
if(is_array($data)){
foreach ($data as $key => $value) {
$data[$key] = self::fix_number_precision($value, $precision);
}
return $data;
}
if(is_numeric($data)){
$precision = is_float($data) ? $precision : 0;
return number_format($data, $precision, '.', '');
}
return $data;
}
?>