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 ,他们是最好的程序员之间的一种规则,有一个很好的和标准的编码风格。