搜索PHP.net进行自动审核不会产生任何结果。在撰写本文时,Wikipedia声称只有Perl拥有它。在搜索Google进行“php autovivification”时,没有明确的确定结果。
这个PHP代码运行良好:
$test['a'][4][6]['b'] = "hello world";
var_dump($test);
array
'a' =>
array
4 =>
array
'b' =>
array
...
任何人都可以提供PHP确实具有此功能的规范答案(最好带有参考资料),以及任何细节,例如它所引入的版本,怪癖,快捷方式等等吗?
答案 0 :(得分:10)
是的,PHP确实具有自动生成功能(并且已经使用了很长时间),尽管它没有被该术语引用。 PHP.net州:
现有阵列可以修改 明确设置其中的值。
这是通过赋值来完成的 数组,指定键 括号。钥匙也可以省略, 导致一对空括号 ([])。
$arr[key] = value; $arr[] = value; // key may be an integer or string // value may be any value of any type
如果$ arr尚不存在,那就是 创建,所以这也是一个 另一种创建数组的方法。
但是,文档说明如果您尝试访问未设置数组(或键)的值,它将返回错误:
尝试访问数组密钥 尚未定义的是相同的 作为访问任何其他未定义 变量:E_NOTICE级错误 将发出消息,结果 将为NULL。
我已经找到了旧的 PHP3 手册,其中说明了这一点:
您也可以简单地创建一个数组 向数组添加值。
$a[] = "hello";
答案 1 :(得分:3)
如果PHP支持自动生成,但不是100%,但你发布的语法大部分都适用。
// Works as you have assigned a value of 'hello'
$a['a'][4][6]['b'] = "hello";
var_dump($a);
echo print_r($a,true);
// works as you have assigned a value of 'world'
$b[][][][] = "world";
var_dump($b);
echo print_r($b,true);
// ERROR: Cannot use [] for reading
$c[];
var_dump($c);
echo print_r($c,true);
无法使用[]阅读:Related Link
答案 2 :(得分:3)
在perl中,项目将在检查时自动生效,不需要分配。获取最内层请求密钥所需的项目路径将在检查时创建。请注意{d => undef}是实际上并没有创建条目,而是暗示。
use strict;
use warnings;
use Data::Dumper;
my %a; # as is empty, equivalent to \%a is {};
print Dumper %a;
$a{b}{c}{d}; # \%a is now { b => { c => {}}}
# returns an undef value.
print Dumper \%a;
输出:
$VAR1 = {};
$VAR1 = {
'b' => {
'c' => {}
}
};
perl数组示例:
use strict;
use warnings;
use Data::Dumper;
my (@b,@c); # @b=(), @c=()
print Dumper \@b;
$b[3]; # @b=() aka unchanged.
print Dumper \@b;
$b[3][2][1]; # @b=(undef,undef,undef,[undef,undef,[]])
print Dumper \@b;
print Dumper \@c;
$c[3]=1 ; # @c=(undef,undef,undef,1)
print Dumper \@c;
输出:
Useless use of array element in void context at -e line 7.
Useless use of array element in void context at -e line 9.
$VAR1 = [];
$VAR1 = [];
$VAR1 = [
undef,
undef,
undef,
[
undef,
undef,
[]
]
];
$VAR1 = [];
$VAR1 = [
undef,
undef,
undef,
1
];