php数组键中允许的字符?

时间:2012-05-22 05:17:49

标签: php arrays key

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

这是允许的吗?对我不能使用的东西有任何限制吗?

10 个答案:

答案 0 :(得分:83)

根据manual

  

密钥可以是整数或字符串。值可以是任何值   类型。

     

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

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

手册again

  

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

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

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

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

答案 1 :(得分:11)

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

  

密钥可以是整数或字符串。值可以是任何值   类型。

     

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

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

答案 2 :(得分:8)

我找到了这个答案,寻找有关我遇到的问题的更多信息。我使用的是带有UTF-8字符的字符串,这些字符串不能作为我拥有的数组的键。

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

对我来说(不大或聪明)的解决方案是这样做..

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

答案 3 :(得分:5)

任何可以填充到PHP字符串中的内容都可以用作数组键。允许的字符数没有限制。

$a = array();

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

$x = array();
echo $a[$x]; // not ok

答案 4 :(得分:5)

PHP数组键可以是整数或字符串。 PHP字符串是字节数组,意味着字节序列。没有其他类型的字符串,PHP不会对数组键字符串施加任何特殊限制。换句话说:只要它是一个字符串,任何事情都会发生。

答案 5 :(得分:0)

我个人对数组键中的异常字符没有任何问题。除了说密钥必须是标量之外,什么是合法的还是不合法的。你最好的选择就是尝试看看。

答案 6 :(得分:0)

除了所有答案都是如此:你可以使用PSRs它们是最佳程序员之间的某种规则,以获得良好和标准的编码风格。

答案 7 :(得分:0)

如果复杂键导致“未定义索引”错误,则可能只是出现“修剪”问题。

我发疯了,因为一个复杂的键吐出了“未定义的索引”错误,我认为这可能是语法违规。导致错误的数组键是从MySQL数据库查询的字段中构建的,该字段已转换为键并在新数组中使用。密钥如下所示:pl_1DNKoiJKwotCqAycickBVhTy,这是代码的构造方式。

//new array created from database query
$new_array[$dbquery['fieldname']] = {some value};

//key value found in field of second array
$keyval = $array_two['fieldname'];

//this produced the "undefined index" error
echo $new_array[$keyval];

实际上,$keyval$dbquery['fieldname']似乎是完美的匹配(通过在浏览器中回显两者进行视觉验证)。只需在第二条语句中使用trim就可以解决这个谜团,例如:$keyval = trim($array_two['fieldname']);一旦“修剪”了,php就不再抱怨了。

希望这可以避免一些令人沮丧的时刻...

答案 8 :(得分:0)

在php数组中,您不能使用key:2.3或十进制数字

答案 9 :(得分:-1)

使用ANSI“é”编码php页面将可以使用(Cinéma将不会显示为Cinéma)。 在Notepad ++中,只需使用菜单Encode =>转换ANSI并保存