【问题标题】:PHP array: integer index vs string indexPHP数组:整数索引与字符串索引
【发布时间】:2014-11-25 00:06:20
【问题描述】:

PHP数组的整数索引字符串索引有什么区别(当然后者叫associative array除外)?

那么比如下面两个数组有什么区别:

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

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

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

【问题讨论】:

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

标签: php arrays memory integer associative-array


【解决方案1】:

来自the manual(强调我的):

键可以是整数或字符串。该值可以是任何 输入。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    相关资源
    最近更新 更多