这是我想要完成的事情:
function foo($args) {
switch($args['type']) {
case 'bar':
bar($args['data']); // do something
break;
}
}
// or something like that
这基本上是在PHP中使用named parameters的方法。
现在,为了构建这个$args
数组,我不得不写出如下的丑陋语法:
$builtArgs = array('type' => 'bar',
'data' => array(1, 2, 3),
'data2' => array(5, 10, 20)
);
foo($builtArgs);
当我向数组添加更多维度时,这会变得更加丑陋,并且还迫使我编写大量的array(...)
构造。有没有比较漂亮的方法呢?
首先,如果我们可以使用类似Python的语法,就可以完成:
$buildArgs = {'type' : 'bar', 'data' : [1, 2, 3], 'data2' : [5, 10, 20]};
但它是PHP。
答案 0 :(得分:6)
您可以创建一个JSON编码的字符串,并使用json_decode()
将其转换为变量。这个语法与你提到的类似Python的语法非常相似。
$argstr = '{"type" : "bar", "data" : [1, 2, 3], "data2" : [5, 10, 20]}';
$buildArgs = json_decode($argstr, true);
编辑:更新了代码以适应@herehere的建议。
答案 1 :(得分:2)
没有。用于创建数组的替代语法已多次proposed(链接在dev邮件列表中列出了5个单独的线程),但它们被拒绝了。
答案 2 :(得分:2)
不,在PHP中没有编写数组或对象的“短语法”:你必须编写所有array()
。
(至少,没有这样的语法......可能会出现在PHP的未来版本中;谁知道^^)
但请注意,有太多像这样的符号化阵列会让那些必须调用你的函数的人更难:使用实参数意味着在IDE中自动完成和类型提示......
答案 3 :(得分:2)
没有其他方法可以构建这些嵌套数组 - 但是如何设置代码格式以使其可读,还有一些选项。这是严格的优先选择:
return array
(
'text' => array
(
'name' => 'this is the second',
'this' => 'this is the third',
'newarr' => array
(
'example'
),
)
);
// Or using the long way
$array = array();
$array += array
(
'this' => 'is the first array'
);