PHP数组组合最佳方法

时间:2010-09-25 18:00:08

标签: php multidimensional-array

在PHP中给出以下数组,我怎样才能最好地将它们合并在一起

$masterkeys = array('Key1','Key2');

$settings_foo = array(
     array('ID'=>'Key1',
           'Foo_Setting'=>'SomeValue'));

$settings_bar = array(
     array('ID'=>'Key1',
           'Bar_Setting'=>'SomeOtherValue')); 

最后我需要$ masterkeys作为每个settings_ [foo | bar]数组的组合。

Array( ['Key1'] =  Array('Foo_Setting'=>'SomeValue','Bar_Setting'=>'SomeOtherValue') );

我知道我可以在这上面使用几个foreach循环,但只是想知道是否有一些PHP数组函数可以将它们拼接在一起。

2 个答案:

答案 0 :(得分:1)

虽然您可以使用PHP的一些数组函数,但您的输入数据格式不是很好。通过自己编写,您将获得最少的迭代(可能是最佳性能):

# create an array of $masterkey => array()
$result = array_combine($masterkeys, array_fill(0, count($masterkeys), array()));

# loop through each settings array
foreach (array($settings_foo, $settings_bar) as $settings)
{
  foreach ($settings as $s)
  {
    # merge the array only if the ID is in the master list
    $key = $s['ID'];
    if (array_key_exists($key, $result))    
      $result[$key] = array_merge($result[$key], $s);
  }
}

# unset all extraneous 'ID' properties
foreach (array_keys($result) as $i)
  unset($result[$i]['ID']);

var_dump($result);

作为替代方案,您可以查看array_maparray_filter,但由于数据的结构方式,我不确定它们会有多大用处。

答案 1 :(得分:0)

我不确定你的$masterkeys数组是如何在这里播放的,但是array_merge_recursive可能会做你想要的。