我正在寻找合并两个数组的简单解决方案。除了一个键值对外,它们看起来大都相似。我希望我的结果有一个包含两个可能值的数组。
xdebugged数组看起来像这样(简化):
array (size=3)
'entry' => string '18' (length=2)
'mykey' => string 'value1' (length=6) // here is the difference
'something' => string '1' (length=1)
array (size=3)
'entry' => string '18' (length=2)
'mykey' => string 'value2' (length=6)) // here is the difference
'something' => string '1' (length=1)
我希望结果如下:
array (size=2)
'entry' => string '18' (length=2)
'mykey' => array (size=2)) // both values merged to array
'0' => 'value1' (length=6)
'1' => 'value2' (length=6)
'something' => string '1' (length=1)
如何轻松实现这一目标?
答案 0 :(得分:0)
这样就足够了:
<?php
$array1 = array(
'entry'=>'18',
'mykey'=>'value1',
'something'=>'1'
);
$array2 = array(
'entry'=>'18',
'mykey'=>'value2',
'something'=>'1'
);
$output = array();
foreach($array1 as $k=>$v){
if(isset($array2[$k]) && $array2[$k] === $v){
$output[$k] = $v;
}elseif(isset($array2[$k])){
$output[$k][] = array($v,$array2[$k]);
}else{
$output[$k] = $v;
}
}
foreach($array2 as $k=>$v){
if(!array_key_exists($k,$output)){
$output[$k] = $v;
}
}
echo '<pre>',print_r($output),'</pre>';
修改:我确实喜欢使用Ziarno提到的array_merge_recursive()
,但问题是它会为每个密钥创建一个数组。所以我添加了array_unique()
的使用,然后检查长度是否为1,如果是,则将其展平。
$output = array_merge_recursive($array1, $array2);
foreach($output as $k=>&$v){
$v = array_unique($v);
if(count($v)==1){
$v = $v[0];
}
}
echo '<pre>',print_r($output),'</pre>';
答案 1 :(得分:0)
您需要为此编写自己的自定义代码。
// Get all the key values.
foreach($arrays as $array){
$keys[] = $array['mykey']
}
// retain 1st element & discard others.
$array = array_slice($arrays, 0, 1);
// update to the 1st array element
$array['mykey'] = $keys;
// print
print_r($array);
希望这会有所帮助。
答案 2 :(得分:0)
我认为this功能设计为完全以满足您的需求:
array_merge_recursive($array1, $array2)