PHP与Python的等价物’;s dict.update
Python允许在适当的位置更新字典(即PHP语言中的“关联数组”),如下所示:PHP与Python的等价物’;s dict.update,php,Php,Python允许在适当的位置更新字典(即PHP语言中的“关联数组”),如下所示: mydict={'banana':'yellow','apple':'green','blueberry':'blue'} mydict.update({'apple':'red','orange':'orange'}) 我在PHP中最接近这一点的是: $mydict=[“香蕉”=>“黄色”、“苹果”=>“绿色”、“蓝莓”=>“蓝色”]; $mydict=array\u merge($mydict,['apple
mydict={'banana':'yellow','apple':'green','blueberry':'blue'}
mydict.update({'apple':'red','orange':'orange'})
我在PHP中最接近这一点的是:
$mydict=[“香蕉”=>“黄色”、“苹果”=>“绿色”、“蓝莓”=>“蓝色”];
$mydict=array\u merge($mydict,['apple'=>'red','orange'=>'orange']);
作为DRY的支持者,我不喜欢两次输入
$mydict
。有没有一种简洁的方法来解决这个问题?不完全是这样。最接近的是数组联合运算符+
:
$mydict = ['banana' => 'yellow', 'apple' => 'green', 'blueberry' => 'blue'];
$mydict += ['apple' => 'red', 'orange' => 'orange'];
但是,这不会替换现有的键,因此其工作方式与数组合并不同。如果有两个变量而不是文字,则可以保留它们的顺序以获得覆盖效果:
$mydict = [...];
$newvalues = [...];
$newvalues += $mydict;
这是内置方法所能达到的最接近的效果。数组是一种基本类型。要以面向对象的方式访问它,可以通过扩展来包装它。请注意,结果是一个对象,而不是一个数组。因此,与is_array()的检查将失败
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);
这将产生
MyArray Object
(
[storage:ArrayObject:private] => Array
(
[banana] => yellow
[apple] => red
[blueberry] => blue
[orange] => orange
)
)