将空字符串保存为数组键是否可以?

yo *_*ack 6 php arrays key

我想知道如果我们将一个空字符串作为数组键保存就好了,就像这样

$test = array (
  '' => 'Select',
  1 => 'Internal',
  2 => 'External'
);
Run Code Online (Sandbox Code Playgroud)

任何建议,将不胜感激.

Rom*_*est 6

数组键应该是整数或字符串。
处理空字符串作为数组键远非理想的做法。
将转换为空字符串,即键无效实际上将存储的“下”。
但是这种方法会使您的数组变得模棱两可且不稳定。
考虑以下示例:

$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
Run Code Online (Sandbox Code Playgroud)

下一个案例变得模棱两可:

var_dump($test[""]);   // output "select"
Run Code Online (Sandbox Code Playgroud)

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

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" }
Run Code Online (Sandbox Code Playgroud)

  • 你的第二个例子有什么含糊之处?首先将 '' 设置为 'Select',然后用 'select' 覆盖它。这是明确定义的行为。 (3认同)

Uma*_*mid 1

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