Sherry
Sherry

Reputation: 35

Undefined offset PHP error 1

I'm getting a Undefined offset error in a PHP function

Error codes

PHP Notice: Undefined offset: 1
PHP Notice: Undefined offset: -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;
}

these are the two lines that I have this error

$x_display = $x_array[0] . ((int) $x_array[1][0] !== 0 ? '.' . $x_array[1][0] : '');
$x_display .= $x_parts[$x_count_parts - 1];

How can I fix this? Appreciate your help

Upvotes: 1

Views: 1137

Answers (2)

Vivek Pratap Singh
Vivek Pratap Singh

Reputation: 9974

As per documentation, number_format Formats a number with grouped thousands. So, if you pass number less than 1000, it will not grouped it and hence Undefined Offset Error as you will get only single item in $x_array. Possible solution could be

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

Upvotes: 0

Oli
Oli

Reputation: 1190

This happens, as RiggsFolly alluded to, when you are trying to access an array by key that does not exist. When your number_format does not return thousands and there is no comma sign, there will be only a single item in the array.

A simple fix would be to guard against by checking if the key exists:

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

Upvotes: 1

Related Questions