PHP函数给出未定义的偏移通知

时间:2016-11-21 16:32:41

标签: php

我有一个PHP函数,可以以千为单位返回文章的观看次数。例如,一篇包含1240个视图的文章将显示为1.2k

我正在使用的功能完美无缺。这是功能:

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通知?谢谢!

2 个答案:

答案 0 :(得分: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;
  }
};

答案 1 :(得分: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;
};