Cor*_*bin 83
根据手册:
密钥可以是整数或字符串.值可以是任何类型.
此外,还会发生以下关键演员:
- 包含有效整数的字符串将强制转换为整数类型.例如,键"8"实际上将存储在8下.另一方面,"08"将不会被转换,因为它不是有效的十进制整数.
- 浮点数也会转换为整数,这意味着小数部分将被截断.例如,密钥8.7实际上将存储在8下.
- Bool也会被转换为整数,即键值true实际上将存储在1下,键值false则在0下.
- Null将被转换为空字符串,即键null实际上将存储在""下.
- 数组和对象不能用作键.这样做会导致警告:非法偏移类型.
手册再次:
字符串是一系列字符,其中字符与字节相同.这意味着PHP仅支持256个字符集,因此不提供本机Unicode支持.查看字符串类型的详细信息.
简而言之,任何字符串都可以成为关键.字符串可以包含任何二进制数据(最多2GB).因此,密钥可以是任何二进制数据(因为字符串可以是任何二进制数据).
一些随机(有效)滥用数组键:
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
Run Code Online (Sandbox Code Playgroud)
Mat*_*hew 12
密钥必须是字符串或整数.有一些演员阵容发生,但我认为手册很好地解释了:
密钥可以是整数或字符串.值可以是任何类型.
此外,还会发生以下关键演员:
- 包含有效整数的字符串将强制转换为整数类型.例如,键"8"实际上将存储在8下.另一方面,"08"将不会被转换,因为它不是有效的十进制整数.
- 浮点数也会转换为整数,这意味着小数部分将被截断.例如,密钥8.7实际上将存储在8下.
- Bool也会被转换为整数,即键值true实际上将存储在1下,键值false则在0下.
- Null将被转换为空字符串,即键null实际上将存储在""下.
- 数组和对象不能用作键.这样做会导致警告:非法偏移类型.
我找到了这个答案,寻找有关我遇到的问题的更多信息.我使用的是带有UTF-8字符的字符串,这些字符串不能作为我拥有的数组的键.
就像是
$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str]; // did not work
Run Code Online (Sandbox Code Playgroud)
对我来说(不大或聪明)的解决方案是这样做..
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
Run Code Online (Sandbox Code Playgroud)
你可以填入PHP字符串的任何东西都可以用作数组键.允许的字符数没有限制.
$a = array();
$x = 'long string of random garage';
echo $a[$x]; // this is ok
$x = array();
echo $a[$x]; // not ok
Run Code Online (Sandbox Code Playgroud)
PHP数组键可以是整数或字符串.PHP字符串是字节数组,意味着字节序列.没有其他类型的字符串,PHP不会对数组键字符串施加任何特殊限制.换句话说:只要它是一个字符串,任何事情都会发生.