字符在PHP数组键允许吗?字符在PHP数组键允许吗?(Characters allowed in p

2019-05-14 09:45发布

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

这可以吗? 有没有什么我不能使用任何约束?

Answer 1:

根据该手册 :

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

会出现另外以下主要类型转换:

  • 含有效整数的字符串将被强制转换为整数类型。 例如键“8”将实际8.根据存储在另一方面“08”不会投,因为它不是一个有效的十进制整数。
  • 浮子还转换为整数,这意味着小数部分将被截断。 例如8.7的关键实际保存8下。
  • BOOLS被转换为整数,也即真正的关键,实际上在1和0下的关键假存储。
  • 空将转换为空字符串,即键无效实际上将“下的”存储。
  • 数组和对象不能用作键。 这样做会导致一个警告:非法偏移类型。

手动再次 :

字符串是一系列字符,其中一个字符是相同的一个字节的。 这意味着,PHP只支持256个字符集,因此不提供原生的Unicode支持。 参见字符串类型的细节。

因此,在短期,任何字符串可以是一个关键。 而一个字符串可以包含(最大2GB)的任何二进制数据。 因此,一个键可以是任意的二进制数据(因为字符串可以是任意的二进制数据)。

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

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


Answer 2:

密钥必须是一个字符串或一个整数。 有一些石膏所发生的,但我觉得手工做了解释的一个很好的工作:

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

会出现另外以下主要类型转换:

  • 含有效整数的字符串将被强制转换为整数类型。 例如键“8”将实际8.根据存储在另一方面“08”不会投,因为它不是一个有效的十进制整数。
  • 浮子还转换为整数,这意味着小数部分将被截断。 例如8.7的关键实际保存8下。
  • BOOLS被转换为整数,也即真正的关键,实际上在1和0下的关键假存储。
  • 空将转换为空字符串,即键无效实际上将“下的”存储。
  • 数组和对象不能用作键。 这样做会导致一个警告:非法偏移类型。


Answer 3:

我发现这个答案找上一个问题,我有更多的信息。 我使用的字符串与他们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!


Answer 4:

任何你能塞进一个PHP字符串可以被用来作为数组的关键。 有允许的字符没有限制。

$a = array();

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

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


Answer 5:

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



Answer 6:

我个人没有在数组键特殊字符的任何问题。 是什么,是不合法的是不是有据可查的,比其他地说,关键要有一个标量。 最好的办法是刚刚尝试一下,看看。



Answer 7:

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



Answer 8:

如果复杂的键引起“未定义指数”的错误,你可能只是有一个“瘦身”的问题。

我要疯了,因为复杂的密钥吐出“未定义指数”的错误,我想,也许这是一个语法错误。 导致错误的数组键是从场建在距我是转换成一个密钥,并使用新数组中的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不再抱怨。

希望这可以节省一些人从一些令人沮丧的时刻...



Answer 9:

编码在ANSI PHP页面“é”就可以使用(电影不会显示为支那©MA)。 在记事本++只是使用菜单编码=>转换ANSI和保存



文章来源: Characters allowed in php array keys?
标签: php arrays key