为什么我在php中得到错误的数组计数
为什么我在php中得到错误的数组计数,php,arrays,Php,Arrays,$array=array(0.1=>'a',0.2=>'b') 回波计数($阵列) 它以秒为单位覆盖第一个数组元素,这是因为,我使用了带0的float 所以上述代码的输出是1,而不是2 为什么PHP将数组索引向下舍入到0?数组键被解释为数字,但数字键必须是整数,因此,两个浮点值都被强制转换(截断)为整数零,并且0.2覆盖0.1 var_dump($array); array(1) { [0]=> string(1) "b" } 如果要使用非整数值,请将数组键设置为字符串: $ar
$array=array(0.1=>'a',0.2=>'b')
回波计数($阵列)代码>
它以秒为单位覆盖第一个数组元素,这是因为,我使用了带0的float
所以上述代码的输出是1,而不是2
为什么PHP将数组索引向下舍入到0?数组键被解释为数字,但数字键必须是整数,因此,两个浮点值都被强制转换(截断)为整数零,并且0.2
覆盖0.1
var_dump($array);
array(1) {
[0]=>
string(1) "b"
}
如果要使用非整数值,请将数组键设置为字符串:
$array = array ("0.1" => 'a', "0.2" => 'b');
echo count($array);
// 2
array(2) {
["0.1"]=>
string(1) "a"
["0.2"]=>
string(1) "b"
}
必须对非整数键使用引号
$array = array ('0.1' => 'a', '0.2' => 'b');
echo count($array);
您正在将“a”存储到第0.1个元素中,“b”存储到第0.2个元素中。这是不可能的。数组索引必须是整数
也许您想要使用关联数组
$array = array ('0.1' => 'a', '0.2' => 'b');
数组索引不能是浮点数。它们必须是整数或字符串。如果您尝试var\u dump($array)代码>您将看到您的数组如下所示:
array(1) {
[0]=> string(1) "b"
}
$array = array ('0.1' => 'a', '0.2' => 'b');
实际上,您正在两次尝试设置键0
的值。不能将浮点用作数字键0.1和0.2都转换为0
您必须使用整数或字符串。因此,您的选择是:
$array = array ('0.1' => 'a', '0.2' => 'b');
或:
让我们看看重点是什么(我的):
键可以是整数或字符串。该值可以是任意值
类型
此外,还将执行以下关键点转换:[……]浮点也将转换为
整数,这意味着小数部分将被截断
因此,如果您查看阵列:
<?php
$array = array (0.1 => 'a', 0.2 => 'b');
var_dump($array); // let's see what actually *is* in the array
echo count ($array);
因此,首先数组是{0=>'a'}
,然后变成{0=>'b'}
。计算机完全按照你的要求去做,即使不是你想要的
可能的解决方案:将数组键作为字符串传递-不需要转换为int
,它可以按预期工作
$array = array ('0.1' => 'a', '0.2' => 'b');
仅允许整数作为数组的键
看看我打印($array)会得到什么:
但是,您可以这样做:
array(1) {
[0]=> string(1) "b"
}
$array = array ('0.1' => 'a', '0.2' => 'b');
现在印刷品上写着:
Array ( [0.1] => a [0.2] => b )
根据php.net文档中关于具有密钥的数组:
此外,还会发生以下关键点强制转换:
浮点数也被转换为整数,这意味着小数部分
将被截断。例如,键8.7实际上将存储在8下
我试着解释结果。。。0.1和0.2将被解释为0,后者将覆盖前者,最终结果是数组键保持为0,值设置为b
因此,这种行为没有任何问题。这是因为浮点被强制转换为整数,所以第二个条目覆盖第一个条目
实际上,您正在这样做:
$array = array (0 => 'a', 0 => 'b');
echo count ($array);
:
“浮点也可以转换为整数,这意味着小数部分将被截断。例如,键8.7实际上将存储在8之下。”我不知道可以将浮点用于索引键。可能这两个索引都变为0并合并。编辑:它是:键中的浮点被截断为整数。参见Convert keys to Strings您可能有一个字符串索引“0.1”,但如果您忘记了PHP没有错,您对PHP的理解也有错,那么它会产生一大堆微妙的问题。如果有疑问,请参考手册。你们以错误的方式接受了我的问题,我的意思是,其他编程语言并非如此,为什么PHP处理以如此奇怪的方式浮动。我已经问了一个关于php中浮点的问题,请检查更多细节浮点也被转换为整数,这意味着小数部分将被截断。例如,键8.7实际上将存储在8下。这是可能的,但结果见问题。迂腐,我知道;)
$array = array (0 => 'a', 0 => 'b');
echo count ($array);