保留一个空字符串作为数组键可以吗


Is it fine to keep an empty string as array key?

我想知道,如果我们保留一个空字符串作为数组键,比如这个,可以吗

$test = array (
  '' => 'Select',
  1 => 'Internal',
  2 => 'External'
);

如有任何建议,我们将不胜感激。

数组键应该是整数或字符串
将空字符串作为数组键处理远非理想的做法
此外,Null将强制转换为空字符串,即键Null实际上将存储在"下
但这样的方法会使您的数组变得模糊和不稳定
考虑以下示例:

$test = array (
  '' => 'Select',
  1 => 'Internal',
  2 => 'External',
  '' => 'select'
);
var_dump(array_key_exists('', $test));   // output 'bool(true)', not so bad - but only at first glance

下一个例子是模糊性:

var_dump($test[""]);   // output "select"

最后一个例子出现了错误(注意):

var_dump((object) $test);
// output: object(stdClass)#1 (3) { E_NOTICE : type 8 -- Illegal member variable name -- at line 12 [""]=> string(6) "select" [1]=> string(8) "Internal" [2]=> string(8) "External" }

这将很好地工作,但不是一个好方法。例如,如果您需要检查数组的null键,那么这个空字符串将返回true。这种方法会在其他严格类型的语言(如java和C)中产生语法错误。因此最好避免这样的编码:)