Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我在php中得到错误的数组计数_Php_Arrays - Fatal编程技术网

为什么我在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);