在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数组函数可以将它们拼接在一起。
答案 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_map
和array_filter
,但由于数据的结构方式,我不确定它们会有多大用处。
答案 1 :(得分:0)
我不确定你的$masterkeys
数组是如何在这里播放的,但是array_merge_recursive可能会做你想要的。