在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);
答案 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) {
}