PHP数组键允许的字符?

我有一些PHP数组密钥填充了很多奇怪的字符。

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

根据手册 :

密钥可以是整数或string。 该值可以是任何types。

另外还会发生以下关键演员:

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

手册再次 :

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

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

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

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

密钥必须是string或整数。 有一些演员,但我认为该手册做了很好的解释:

密钥可以是整数或string。 该值可以是任何types。

另外还会发生以下关键演员:

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

我发现这个答案寻找更多的信息,我有一个问题。 我在使用UTF-8字符的string,这不会作为我有一个数组的键。

就像是

 $str = "R&D - Solution"; $arr = array( "R&D - Solution" => "Research" ); echo $arr[$str]; // did not work 

对我来说(不是很大或很聪明)的解决scheme就是做这个..

 $str = md5("R&D - Solution"); $arr = array( md5("R&D - Solution") => "Research" ); echo $arr[$str]; // works! 

任何你可以填入PHPstring的东西都可以用作数组键。 对允许的字符没有限制。

 $a = array(); $x = 'long string of random garage'; echo $a[$x]; // this is ok $x = array(); echo $a[$x]; // not ok 

PHP数组键可以是整数或string。 PHPstring是字节数组,意味着字节序列。 没有其他types的string,PHP不会对数组键string施加任何特殊限制。 换句话说:只要是一个string,什么都可以。

我个人没有任何问题与arrays键中的不寻常的字符。 什么是和不是合法的,没有很好的文件记载,除了说,关键必须是一个标量。 你最好的select就是试试看。

除了所有的答案,他们是真实的:你可以使用PSR ,他们是最好的程序员之间的一种规则,有一个很好的和标准的编码风格。