php比较2个关联数组并仅在同一个Key上组合

时间:2017-07-26 09:57:03

标签: php arrays

我有一个特殊情况需要在同一个键上组合两个关联数组

$array_1['key1']="";
$array_1['key2']="";
$array_1['key3']="";
$array_1['key4']="";
$array_1['key5']="";
$array_1['key6']="";
$array_1['key7']="";

$array_2['key1']="value1";
$array_2['key3']="value2";
$array_2['key4']="value3";
$array_2['key8']="value4";

$results=array_merge($array_1,$array_2);

foreach ($results as $key=>$value){
 echo ''.$key.'-<input type="text" value="'.$value.'"><br>';
}

如果我使用 array_merge ,所有键将组合在一起,就像截图的右侧一样;那不是我想要的。我只想要截屏的左侧

为了简单起见,我想显示$ array_1键并将$ array_2加入$ array_1,只使用相同的键。

enter image description here 有人可以帮忙吗?

6 个答案:

答案 0 :(得分:4)

有很多方法可以达到目标。其中之一是使用qemu man page仅将$array_2的值保留为与$array_1共有的键,并将此交集仅合并到$array_1

类似的东西:

$results = array_merge($array_1, array_intersect_key($array_2, $array_1));

答案 1 :(得分:2)

尝试使用$ array_1的键来显示所需的结果

$array_1['key1']="";
$array_1['key2']="";
$array_1['key3']="";
$array_1['key4']="";
$array_1['key5']="";
$array_1['key6']="";
$array_1['key7']="";

$array_2['key1']="value1";
$array_2['key3']="value2";
$array_2['key4']="value3";
$array_2['key8']="value4";

$results=array_merge($array_1,$array_2);

foreach ($array_1 as $key => $value){
 echo ''.$key.'-<input type="text" value="'.$results[$key].'"><br>';
}

答案 2 :(得分:1)

像这样

$array_1['key1']="";
$array_1['key2']="";
$array_1['key3']="";
$array_1['key4']="";
$array_1['key5']="";
$array_1['key6']="";
$array_1['key7']="";

$array_2['key1']="value1";
$array_2['key3']="value2";
$array_2['key4']="value3";
$array_2['key8']="value4";
foreach ($array_1 as $k => $v) {
    if(isset($array_2[$k])){
        $array_1[$k] = empty($array_1[$k])?$array_2[$k]:$array_1[$k];
    }
}
echo "<pre>";
print_r($array_1);

结果是

Array
(
    [key1] => value1
    [key2] => 
    [key3] => value2
    [key4] => value3
    [key5] => 
    [key6] => 
    [key7] => 
)

答案 3 :(得分:1)

这里你必须循环遍历array_1然后使用array_key_exists()函数检查这个关键轴是否在isay_2中,如果是,则设置$ array_1的值[key] = $ array_2 [key]

$array_1['key1']="";
$array_1['key2']="";
$array_1['key3']="";
$array_1['key4']="";
$array_1['key5']="";
$array_1['key6']="";
$array_1['key7']="";
$array_2['key1']="value1";
$array_2['key3']="value2";
$array_2['key4']="value3";
$array_2['key8']="value4";
foreach ($array_1 as $key=>$value){
if(array_key_exists($key,$array_2)){
$array_1[$key]=$array_2[$key];
} 
print_r($array_1);

答案 4 :(得分:1)

您可以尝试此解决方案

$array_1['key1']="";
$array_1['key2']="";
$array_1['key3']="";
$array_1['key4']="";
$array_1['key5']="";
$array_1['key6']="";
$array_1['key7']="";

$array_2['key1']="value1";
$array_2['key3']="value2";
$array_2['key4']="value3";
$array_2['key8']="value4";

$updatedArray = [];
$finalArray = array_intersect_key($array_1,$array_2);
foreach ($finalArray as $key=>$value){
    $updatedArray[$key] = $array_2[$key];
}

print_r($updatedArray);

答案 5 :(得分:0)

你可以尝试这样的事情:

$keys = array_keys($array2);
foreach ($array1 as $key => $value) {
    if (in_array($key, $keys)) {
        echo ''.$key.'-<input type="text" value="'.$value.'"><br>';
    }
}