更新:我提出这个问题的初衷是确定 PHP 是否真的有这个功能。这在答案对标量问题的关注中丢失了。请改为查看这个新问题:“PHP 是否具有自动生存功能?” 这个问题留在这里供参考。
根据 Wikipedia,PHP 没有 autovivification,但此代码有效:
$test['a']['b'] = 1;
$test['a']['c'] = 1;
$test['b']['b'] = 1;
$test['b']['c'] = 1;
var_dump($test);
输出:
array
'a' =>
array
'b' => int 1
'c' => int 1
'b' =>
array
'b' => int 1
'c' => int 1
我发现这段代码也有效:
$test['a'][4] = 1;
$test['b'][4]['f'] = 3;
但是添加此行会导致警告(“警告:不能将标量值用作数组”)
$test['a'][4]['f'] = 3;
这里发生了什么?为什么在索引后添加关联元素时会失败?这是“真正的”类似 Perl 的自动生存,还是它的某种变体,还是其他什么?
编辑:哦,我现在看到标量错误,哎呀!这些按预期工作:
$test['a'][4]['a'] = 1;
$test['a'][4]['b'] = 2;
$test['a'][5]['c'] = 3;
$test['a'][8]['d'] = 4;
那么,php 确实有 autovivification 吗?在 Google 中搜索“php autovivification”并没有找到规范的答案或示例。