繁体   English   中英

PHP内部如何使用数组键和类型?

[英]How does PHP internally use array keys and types?

假设我定义了一个数组:

$a = Array();
$a[0] = 1;
$a['0'] = 2;
$a['0a'] = 3;
print_r($a);

输出是相当可观的。 我假设在内部存在某种strval()intval()以允许覆盖该值。

Array
(
    [0] => 2
    [0a] => 3
)

但这让我感到困惑。

foreach($a as $k => $v) {
    print(gettype($k) . "\n");
}

这给了我:

integer
string

在使用Array键时,PHP内部如何进行这些类型转换? 即,如何根据文档确定密钥是“有效十进制整数”? 此外, is_int不适用于字符串。

所有在php手册中解释

PHP中的数组实际上是一个有序映射。

密钥可以是整数或字符串。

执行一些类型转换(即使在字符串上)

包含有效整数的字符串将强制转换为整数类型。 例如,键“8”实际上将存储在8下。另一方面,“08”将不会被转换,因为它不是有效的十进制整数。

浮点数也会转换为整数,这意味着小数部分将被截断。 例如,密钥8.7实际上将存储在8下。

Bool也会被转换为整数,即键值true实际上将存储在1下,键值false则在0下。

Null将被转换为空字符串,即键null实际上将存储在“”下。

数组和对象不能用作键。 这样做会导致警告:非法偏移类型。

编辑

如果您想更多地了解PHP如何在内部处理数组,我推荐这篇文章

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM