我在PHP函数中得到一个未定义的偏移量错误
错误代码
PHP注意:未定义的偏移量:1
PHP注意:未定义的偏移量:-1
function thousandsCurrencyFormat($num) {
$x = round($num);
$x_number_format = number_format($x);
$x_array = explode(',', $x_number_format);
$x_parts = array('k', 'm', 'b', 't');
$x_count_parts = count($x_array) - 1;
$x_display = $x;
$x_display = $x_array[0] . ((int) $x_array[1][0] !== 0 ? '.' . $x_array[1][0] : '');
$x_display .= $x_parts[$x_count_parts - 1];
return $x_display;
}
这是我有这个错误的两行
$x_display = $x_array[0] . ((int) $x_array[1][0] !== 0 ? '.' . $x_array[1][0] : '');
$x_display .= $x_parts[$x_count_parts - 1];
我该如何解决这个问题?感谢您的帮助
答案 0 :(得分:1)
当你试图通过不存在的密钥访问数组时,正如RiggsFolly所提到的那样。当number_format没有返回数千且没有逗号时,数组中只有一个项目。
一个简单的解决方法是通过检查密钥是否存在来防范:
$x_display = array_key_exists(1, $x_array) ? $x_array[0] . ((int) $x_array[1][0] !== 0 ? '.' . $x_array[1][0] : '') : $x_array[0] ;
$x_display .= array_key_exists($x_count_parts - 1, $x_parts) ? $x_parts[$x_count_parts - 1] : '';
答案 1 :(得分:0)
As per documentation,number_format
格式化数千个数字。因此,如果您传递的数字小于1000,它将不会对其进行分组,因此未定义偏移错误,因为您将只获得$ x_array中的单个项目。可能的解决方案可能是
if(array_key_exists(1, $x_array)){
$x_display = $x_array[0] . ((int) $x_array[1][0] !== 0 ? '.' . $x_array[1][0] : '');
}else{
$x_display = $x_array[0];
}
if(array_key_exists($x_count_parts - 1, $x_parts)){
$x_display .= $x_parts[$x_count_parts - 1];
}else{
$x_display = "";
}