Reputation: 1645
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.
Upvotes: 1
Views: 1306
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
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
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
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
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
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