我有一个数组,其中包含我的插件的一些默认设置。随着插件的发展,设置可能会被删除或从版本添加到版本。
这是一个示例默认数组:
$defaults = array(
'setting1' => 'somevalue',
'setting2' => 'somevalue',
'setting4' => 'somevalue',
);
以下是实时设置数据的示例,需要为新的$ default结构更新结构:
$livesettings = array(
'setting1' => 'foo',
'setting2' => 'bar',
'setting3' => 'foobar',
);
我正在寻找一个可以传递两个数组的函数,并且livesettings的结构会更新以匹配$ defaults。
所以在这种情况下,在livesettings中:
somevalue
他们在PHP中的任何功能都可以一次完成吗?如果是的话是什么?如果没有,我将如何使用PHP代码实现这一目标?
答案 0 :(得分:8)
您需要array_intersect_key()和array_merge()的组合。
$livesettings = array_intersect_key($livesettings, $defaults);
$livesettings = array_merge($defaults, $livesettings);
第一个功能会移除$defaults
中找不到的所有密钥,而第二个功能会添加$defaults
中未找到的$livesettings
项目
答案 1 :(得分:1)
你不需要这个问题的函数,你也可以使用$ defaults像一个基数组,
$defaults = array(
'setting1' => 'somevalue',
'setting2' => 'somevalue',
'setting4' => 'somevalue',
);
$livesettings = $defaults; // it will be copited by value,
$livesettings['setting1'] = 'overriden setting 1';
$livesettings['setting3'] = 'added new setting to live config';