将空字符串作为数组键是否可行?

11

我想知道,如果我们把一个空字符串作为数组的键,是否可以这样做。

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

有任何建议将不胜感激。


1
请查看此链接:https://dev59.com/lWMl5IYBdhLWcg3woYPa - Drudge Rajen
1
在这种情况下,它看起来非常好。通常在填充<select>菜单时使用它。 - Clay
我建议避免这种做法,因为如果未来尝试将数组进行json_encode或转换为对象,会导致混淆的错误。 - Jules Colle
2个回答

8

数组键应该是整数或字符串。
使用空字符串作为数组键并不是理想的做法。
另外,Null将被转换为空字符串,即key 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" }

你让我的概念清晰明了。 - Umair Hamid
7
你的第二个例子有什么歧义吗?你首先将 '' 设置为 'Select',然后用 'select' 覆盖它。这是明确定义的行为。 - Yay295

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接