2016-05-28 9 views
1

Ich erhalte einen undefinierten Offset-Fehler in einer PHP-Funktionundefiniert Offset PHP-Fehler 1

Fehlercodes

PHP Hinweis: Undefined offset: 1
PHP Hinweis: Nicht definiert 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; 
} 

das sind die beiden Linien, die ich diesen Fehler haben

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

Wie kann ich das beheben? Schätzen Sie Ihre Hilfe

+0

Sie den Fehler, denn wenn man '100' passieren dann die' $ x_array' enthält nur '1' Vorkommen dh 'x_array [0]' Sie müssen überprüfen, ob die eingegebene Nummer an Least '1000' – RiggsFolly

+0

Vielleicht könnten Sie das einfache [number_format()] (http://php.net/manual/en/function.number-format.php) verwenden – RiggsFolly

+0

Mögliche Duplikate von [Referenz - Was bedeutet dieser Fehler in? PHP?] (Http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php) –

Antwort

1

Dies geschieht, wie RiggsFolly angespielt, wenn Sie versuchen, ein Array mit Schlüssel zugreifen, die nicht vorhanden ist. Wenn Ihr Zahlenformat tausende nicht zurückgibt und kein Kommazeichen vorhanden ist, wird nur ein einzelnes Element im Array vorhanden sein.

Eine einfache Lösung wäre gegen durch Überprüfung zu schützen, wenn der Schlüssel vorhanden ist: mit Tausender-Gruppierung

$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 Formatiert eine Zahl. Also, wenn Sie die Zahl unter 1000 übergeben, wird es nicht gruppiert und daher Undefined Offset Error, da Sie nur einzelne Artikel in $ x_array bekommen. Mögliche Lösung könnte sein,

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