PHP相当于Python的dict.update

时间:2017-01-24 10:56:34

标签: php

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。有简洁的方法吗?

2 个答案:

答案 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);