PHP数组:整数索引 vs 字符串索引

5

PHP数组的整数索引和字符串索引有什么区别吗(当然,除了后者被称为“关联数组”)?

例如,以下两个数组之间有什么区别:

$intIndex[5] = "Hello";
$intIndex[6] = "World";
$intIndex[7] = "!";

「和」
$strIndex['5'] = "Hello";
$strIndex['6'] = "World";
$strIndex['7'] = "!";

在第一种情况下,$intIndex[0]$intIndex[4]会发生什么?

它会给你一个“未定义索引0/4”的PHP警告。 - TiMESPLiNTER
@TiMESPLiNTER,您能否澄清一下为什么会出现这个错误?我以为在PHP中不需要变量声明。 - CluelessNoob
1
你的数组中没有键为04的条目。这是该数组中未定义的索引。因此,如果使用$intIndex[0],将会遇到一个Undefined index PHP警告。 - TiMESPLiNTER
@TiMESPLiNTER 好的,所以这个内存是未分配的吗?我的意思是,即使我直接使用 $arr[1000],前999个索引也不会浪费吗? - CluelessNoob
我指的是前1000个(0-999)索引。 - CluelessNoob
1
是的,那块内存未分配。因为这些索引不存在。但只要给数组索引赋值,就会“自动”分配它。所以$intIndex[0] = 'foo';将为该特定索引分配内存。 - TiMESPLiNTER
1个回答

6

来自手册(重点是我的):

键可以是整数或字符串。值可以是任意类型。

此外,还会发生以下键强制转换

  • 包含有效整数的字符串将被强制转换为整数类型。例如,键“8”实际上将存储在8下。另一方面,“08”不会被转换,因为它不是有效的十进制整数。
  • 浮点数也会被强制转换为整数,这意味着小数部分将被截断。例如,键8.7实际上将存储在8下。
  • [...]

这与PHP数组是稀疏的事实无关。

您可以使用var_dump()验证所有这些内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接