【发布时间】:2013-06-09 16:09:45
【问题描述】:
我目前正在清理一些讨厌的代码。这段代码非常深入地为现有数组定义了几个新键:
$form['long_key_name_right_here_you_see']['title'] = 'Hello';
$form['long_key_name_right_here_you_see']['body'] = 'This be a greeting';
$form['long_key_name_right_here_you_see']['etc'] = 'This does nothing';
$form['another_long_key_name_right']['title'] = 'Hello!';
$form['another_long_key_name_right']['body'] = 'This be a greeting!';
$form['another_long_key_name_right']['etc'] = 'This does nothing.';
我更愿意这样定义:
$arr_form = array('long_key_name_right_here_you_see' => array('title' => 'Hello',
'body' => 'This be a greeting',
'etc' => 'This does nothing'
),
'another_long_key_name_right' => array('title' => 'Hello!',
'body' => 'This be a greeting!',
'etc' => 'This does nothing.'));
$form = ($arr_form + $form);
- 我能否始终依靠我喜欢的方法来获得与现有案例相同的结果?
- 我喜欢的方法是否会被认为不明确且毫无意义?
基本上,我只是觉得在代码中定义成行的相同键的巨大墙壁看起来有点难看,但也许这只是我的挑剔的想法。
+ 运算符返回附加到左侧的右侧数组 大批;对于两个数组中都存在的键,来自 将使用左侧数组,并且匹配元素来自 右侧数组将被忽略。
注意:
接受的答案在我的案例中帮助了我。这个问题不一定有一个正确的答案,但可能会启发其他人,就像我一样。
【问题讨论】:
-
除了语法关闭(你想要
$form += $defaultValues)之外,这是要走的路。 -
你确定这是正确的方法吗?该数组具有现有值,并且需要覆盖键。请检查我在问题中链接的文档并分享您的想法。
-
啊,是的,我错过了。在这种情况下,您的语法是正确的。我宁愿使用
$form = array_merge($form, $defaultValues)来让读者非常清楚应该 覆盖值(这是+和array_merge之间的区别),但最终结果是一样的。 -
执行乔恩所说的。试试
$form = array_merge($form, $arr_form);,没问题,比联合算子稳定。