12

我正在从数组中获取数据。由于某种原因,该数组具有键值,例如[3.3]我无法从中检索数据。

我有这个数组[3.3] => First Name [3.6] => Last Name[2] => email@example.com

当我尝试调用$array[3.3]它时,它返回 null,但是当我调用时,$array[2]我收到了电子邮件。有任何想法吗?

4

6 回答 6

30

引用键值时使用单引号(基本上将其视为字符串,这就是 PHP 可能正在做的事情)

echo $array['3.3'];
于 2010-12-27T22:23:43.900 回答
18

来自 php 手册:

键中的浮点数被截断为整数。

所以你试图得到不存在的 $array[3] ,所以你得到 Null

于 2010-12-27T22:26:50.073 回答
8

键可以是整数或字符串。如果键是整数的标准表示,它将被解释为这样(即“8”将被解释为 8,而“08”将被解释为“08”)。键中的浮点数被截断为整数。索引和关联数组类型在 PHP 中是相同的类型,既可以包含整数索引,也可以包含字符串索引。

由于浮点数总是会被截断为整数(例如,数组总是将 3.3 解释为 3)我想知道您的数组是否期望字符串而不是浮点数。您是否尝试过 $array["3.3"] 而不是 $array[3.3]?

于 2010-12-27T22:26:54.717 回答
2

我猜这与 PHP autocasting 3.3 => float 有关

试试 $array['3.3']

于 2010-12-27T22:24:53.017 回答
2

浮点数和key 中的数字字符串被截断为integer

所以输出这段代码:

$array = [1 => "a", "1" => "b", 1.5 => "c", true => "d"];
print_r($array);

将会:

Array
(
    [1] => d
)
于 2017-08-24T08:40:59.077 回答
0

使用浮点键将元素添加到数组时我遇到了类似的问题 - PHP 正在覆盖现有值(键 1.2 被 1.5 覆盖等)。

基于此 SO 线程,我将强制转换键添加到字符串:

$options[(string)$value] = new TpValueModelOption($value, $label);
于 2020-12-11T06:37:14.693 回答