Python允许就地更新字典(即PHP中的“关联数组”),如下所示:
mydict = {'banana': 'yellow', 'apple': 'green', 'blueberry': 'blue'}
mydict.update({'apple': 'red', 'orange': 'orange'})
我在PHP中最接近匹配的是:
$mydict = ['banana' => 'yellow', 'apple' => 'green', 'blueberry' => 'blue'];
$mydict = array_merge($mydict, ['apple' => 'red', 'orange' => 'orange']);
作为DRY的支持者,我不喜欢两次输入$mydict
。有简洁的方法吗?
答案 0 :(得分:1)
不完全是。你得到的最接近的是数组联合运算符+
:
$mydict = ['banana' => 'yellow', 'apple' => 'green', 'blueberry' => 'blue'];
$mydict += ['apple' => 'red', 'orange' => 'orange'];
但是,这会不替换现有密钥,因此与array_merge
的工作方式不同。如果你有两个变量而不是文字,你可以保留它们的顺序来获得覆盖效果:
$mydict = [...];
$newvalues = [...];
$newvalues += $mydict;
这与内置方法一样接近。
答案 1 :(得分:0)
数组是原始类型。要以面向对象的方式访问它,您可以通过扩展ArrayObject来包装它。注意结果是对象,而不是数组。所以用is_array()检查会失败。
var text = document.selection.createRange().text;
这将产生
class MyArray extends ArrayObject
{
public function update(array $value)
{
$this->exchangeArray(array_merge($this->getArrayCopy(),$value));
}
}
$mydict = ['banana' => 'yellow', 'apple' => 'green', 'blueberry' => 'blue'];
$mydict2 = ['apple' => 'red', 'orange' => 'orange'];
$ta = new MyArray($mydict);
$ta->update($mydict2);
print_r($ta);