2016-11-21 51 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; 
};