PHP数组键中允许的字符?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

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

这是否允许?我不能使用什么限制?

提问于
用户回答回答于

键必须是字符串或整数。有一些模型正在进行,但我认为手册在解释方面做得很好:

键可以是整数,也可以是字符串。这个值可以是任何类型的。 此外,还将发生以下键转换:

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

根据手册

密钥可以是整数或字符串。该值可以是任何类型。 此外还会发生以下关键演员:

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

手册:

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

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

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

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

扫码关注云+社区