gosulove
gosulove

Reputation: 1645

php compare 2 associative arrays and combine on the same Key only

I have a special condition that need to combine two associative array on the same keys Only

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

If i use array_merge, all the keys will be combined together, just like the right side of the screenshot; that's not what I want. I only want the left side of the screenshot

To put it simpler, I want to display $array_1 Keys and join $array_2 into $array_1 with the same Keys only.

enter image description here Anyone can help?

Upvotes: 1

Views: 1306

Answers (6)

Osama
Osama

Reputation: 3040

Here you have to loop through array_1 then using array_key_exists() function check if this key axis td in areay_2 if yes set the value of $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);

Upvotes: 1

axiac
axiac

Reputation: 72186

There are many ways to reach your goal. One of them is to use array_intersect_key() to keep the values of $array_2 only for keys it has in common with $array_1 and merge only this intersection into $array_1.

Something like:

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

Upvotes: 3

Dhaval Chheda
Dhaval Chheda

Reputation: 5147

You can try this solution

$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);

Upvotes: 1

mmmorgen
mmmorgen

Reputation: 61

like this

$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);

result is

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

Upvotes: 1

Arun Kumaresh
Arun Kumaresh

Reputation: 6311

try this use the keys of $array_1 to show the desired result

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

Upvotes: 2

Jos&#233; Luis Luri
Jos&#233; Luis Luri

Reputation: 1

You can try something like that:

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

Upvotes: 0

Related Questions