PhpStorm代码检查返回“非法数组键类型浮点数”

时间:2018-10-27 19:09:24

标签: php phpstorm

在PhpStorm中,我收到有关非法数组键类型的警告,但我不知道关于$size[$factor]的非法情况。

  

非法数组键类型为float

这是我的代码:

    $size       = array(' kB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB');
    $factor     = round((strlen($kbytes) - 1) / 3);
    $sizereturn = sprintf("%.{$decimals}f", $kbytes / pow(1024, $factor)) . @$size[$factor];
    $sizereturn = str_replace('.', ',', $sizereturn);

3 个答案:

答案 0 :(得分:2)

round()函数返回浮点数。

用于访问数组元素的有效键应为整数和字符串。

首先尝试将其投射到int,例如

$factor     = (int)round((strlen($kbytes) - 1) / 3);

答案 1 :(得分:0)

$size数组是一个简单的数组,具有0, 1, 2...,7个整数索引,而您分配的则是一个浮点数。使用类型转换将其首先转换为integer,然后使用它。

答案 2 :(得分:0)

出于完整性考虑,值得注意的是,它只是一个PhpStorm功能,可以提醒潜在的错误。 PHP本身是一种宽松类型的语言,它不会抱怨或关心数组键类型as long as they're scalars,而只会转换为适当的类型:

var_dump([
    2.0 => 'Red',
    3.1 => 'Green',
    'Kittens' => 'Blue',
]);

class Foo
{
    public function __toString()
    {
        return 'bar';
    }
}
var_dump([
    (string)new Foo() => 'This is valid too',
]);

var_dump([
    new Foo()      => 'Invalid key', // Warning: Illegal offset type
    range(1, 2)    => 'Invalid key', // Warning: Illegal offset type
    new Datetime() => 'Invalid key', // Warning: Illegal offset type
]);
array(3) {
  [2]=>
  string(3) "Red"
  [3]=>
  string(5) "Green"
  ["Kittens"]=>
  string(4) "Blue"
}
array(1) {
  ["bar"]=>
  string(17) "This is valid too"
}
array(0) {
}

Demo