2016-11-21 59 views
0

我有一個PHP函數,返回一篇文章的視圖數量,以千爲單位。例如,一個有1240個視圖的文章將會顯示爲1.2k提供未定義抵消通知的PHP函數

我正在使用的函數是完美的。這是函數:

function kconvert($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] : ''); <-- line 78 
    $x_display .= $x_parts[$x_count_parts - 1]; <!-- line 79 
    return $x_display; 
}; 

的問題是,每到這個功能被執行,所以在每一頁上的負載,這寫一個PHP通知error_log中:

PHP Notice: Undefined offset: 1 in xxx/functions.php on line 78 
PHP Notice: Undefined offset: -1 in xxx/functions.php on line 79 

我強調了行號在上面的函數中。

是否有任何方法可以確保此函數在每次加載時都沒有給出PHP通知?謝謝!

+0

是什麼!==在這裏做什麼? –

+0

您的意思是說,在正確的情況下,該功能起作用並且不會發出通知?如果是這種情況,那麼當情況不正確時(它的輸入「$ num」不完整或不是數字或未設置),您需要邏輯來防止它被調用。發佈代碼_calls_功能請/ –

+0

喬恩,其實我做到了。對不起。 – NikxDa

回答

1

只有測試,如果數量少於1000,這是在錯誤發生

function kconvert($num) { 
    $x = round($num); 
    if($num >= 1000){ 
     $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; 
     echo $x_count_parts; 
     $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; 
    }else{ 
     return $num; 
    } 
}; 
+0

這個伎倆。非常感謝! –

+0

事實上,儘管我想OP應該在試圖「投射」它的格式之前測試輸入的數字。如果即使對於小數字,你也想顯示數千個數字,你應該像'if(strlen($ x_number_format)<= 3)$ x_number_format ='0''那樣做。 $ x_number_format;'(即某種前導零),就在計算'$ x_number_format'之後。 –

0
function kconvert($num) { 
    $x = round($num); 
    $x_number_format = number_format($x); 
    $x_array = explode(',', $x_number_format); 
    $x_display = $x; 
    if (count($x_array) > 1) { 
    $x_parts = array('k', 'm', 'b', 't'); 
    $x_count_parts = count($x_array) - 1; 
    $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; 
};