2016-05-28 3 views
1

Я получаю ошибку смещения Не определено в функции PHPUndefined смещение 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 documentation, number_format форматирует число с разделением групп. Таким образом, если вы пройдете число меньше 1000, оно не будет сгруппировано и, следовательно, Undefined Offset Error, так как вы получите только один элемент в $ 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 = ""; 
} 
Смежные вопросы