php 数组键中是否允许字符?

2022-08-30 07:57:04

我有一些php数组键,里面填充了很多奇怪的字符。

这是允许的吗?我不能使用的东西有什么限制吗?


答案 1

根据手册

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

此外,还将发生以下关键转换:

  • 包含有效整数的字符串将转换为整数类型。例如,密钥“8”实际上将存储在8下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。
  • 浮点数也转换为整数,这意味着小数部分将被截断。例如,密钥 8.7 实际上将存储在 8 下。
  • 布尔斯也被强制转换为整数,即密钥 true 实际上将存储在 1 下,而 key false 将存储在 0 下。
  • Null 将转换为空字符串,即键 null 实际上将存储在 “” 下。
  • 数组和对象不能用作键。这样做将导致警告:偏移类型非法。

再次使用手册:

字符串是一系列字符,其中字符与字节相同。这意味着 PHP 仅支持 256 个字符集,因此不提供本机 Unicode 支持。请参阅字符串类型的详细信息。

简而言之,任何字符串都可以是键。字符串可以包含任何二进制数据(最多 2GB)。因此,键可以是任何二进制数据(因为字符串可以是任何二进制数据)。

一些随机(有效)滥用数组键:

$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);

答案 2

键必须是字符串或整数。有一些演员发生了,但我认为手册很好地解释了:

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

此外,还将发生以下关键转换:

  • 包含有效整数的字符串将转换为整数类型。例如,密钥“8”实际上将存储在8下。另一方面,“08”不会被强制转换,因为它不是有效的十进制整数。
  • 浮点数也转换为整数,这意味着小数部分将被截断。例如,密钥 8.7 实际上将存储在 8 下。
  • 布尔斯也被强制转换为整数,即密钥 true 实际上将存储在 1 下,而 key false 将存储在 0 下。
  • Null 将转换为空字符串,即键 null 实际上将存储在 “” 下。
  • 数组和对象不能用作键。这样做将导致警告:偏移类型非法。