1

我正在寻找一个简单的解决方案来合并两个数组。它们看起来大多相似,除了一个键值对。我希望我的结果有一个包含两个可能值的数组。

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)

如何轻松实现这一目标?

4

3 回答 3

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

编辑:我确实喜欢Ziarnoarray_merge_recursive()提到的使用,但问题是它会为每个键创建一个数组。所以我添加了使用,然后检查长度是否为1,如果是,则将其展平。array_unique()

$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>';
于 2013-07-02T18:23:37.000 回答
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);

希望这会有所帮助。

于 2013-07-02T18:29:01.170 回答
0

我认为这个功能正是为你所需要的而设计的:

array_merge_recursive($array1, $array2)

于 2013-07-02T18:29:01.353 回答