未定义的偏移PHP错误1

时间:2016-05-28 19:01:54

标签: php

我在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];

我该如何解决这个问题?感谢您的帮助

2 个答案:

答案 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 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 = "";
}