2016-05-28 96 views
1

我得到一个未定义的偏移误差在PHP函数未定义偏移PHP的错误1

错误代码

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

因为如果传递'100'那么'$ x_array'只包含你得到的错误'1'次数即'x_array [0]'你需要验证输入的号码是最少'1000' – RiggsFolly

+0

也许你可以使用简单的[number_format()](http://php.net/manual/en/function.number-format.php) – RiggsFolly

+0

可能的重复[参考 - 这个错误意味着什么PHP?](http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) –

回答

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] : ''; 
0

As per documentationnumber_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 = ""; 
}