PHP使用默认数组来保持正确的数组结构

时间:2011-05-20 11:07:00

标签: php arrays merge

我有一个数组,其中包含我的插件的一些默认设置。随着插件的发展,设置可能会被删除或从版本添加到版本。

这是一个示例默认数组:

$defaults = array(
                    'setting1' => 'somevalue',
                    'setting2' => 'somevalue',
                    'setting4' => 'somevalue',
                  );

以下是实时设置数据的示例,需要为新的$ default结构更新结构:

$livesettings = array(
                        'setting1' => 'foo',
                        'setting2' => 'bar',
                        'setting3' => 'foobar',
                      );

我正在寻找一个可以传递两个数组的函数,并且livesettings的结构会更新以匹配$ defaults。

所以在这种情况下,在livesettings中:

  1. 未触摸setting1和setting2。他们的价值观保持不变
  2. setting3因不再需要而被删除
  3. setting4添加了默认值somevalue
  4. 他们在PHP中的任何功能都可以一次完成吗?如果是的话是什么?如果没有,我将如何使用PHP代码实现这一目标?

2 个答案:

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