Reputation: 587
I need to combine two array by using key field.
$array1 = array( val1 => 'abc', val2 => '5' );
$array1 = array( val1 => 'bcd', val2 => '2' );
$array2 = array( val1 => 'abc', val3 => '1' );
$array2 = array( val1 => 'zzz', val3 => '3' );
array1:
val1 val2
abc 5
bcd 2
array2:
val1 val3
abc 1
zzz 3
The result have to be as follows;(requirement)
val1 val2 val3
abc 5 1
bcd 2 0
zzz 0 3
still now, i developed which further needs some modification to achieve the above table.
foreach($array1 as $ar1){
$val1='';
$val2='';
$val3='';
foreach($array2 as $ar2){
if($ar1['val1']==$ar2['val1']){
$val1=$ar1['val1'];
$val2=$ar1['val2'];
$val3=$ar2['val3'];
}
}
$result=array(
val1 => $val1,
val2 => $val2,
val3 => $val3
);
}
This captures only common data.
Upvotes: 0
Views: 263
Reputation: 781096
$result = array();
// Make $result an associative array, containing contents of $array1
foreach ($array1 as $e) {
$e['val3'] = 0; // val3 defaults to 0
$result[$e['val1']] = $e;
}
// Now merge in $array2
foreach ($array2 as $e) {
if (isset($result[$e['val1']])) {
$result[$e['val1']]['val3'] = $e['val3'];
} else {
$e['val2'] = 0; // val2 defaults to 0
$result[$e['val1']] = $e;
}
}
// Convert to indexed array
$result = array_values($result);
BTW, the correct way to create the input arrays is:
$array1 = array(array( 'val1' => 'abc', 'val2' => '5' ),
array( 'val1' => 'bcd', 'val2' => '2' )
);
$array2 = array(array( 'val1' => 'abc', 'val3' => '1' ),
array( 'val1' => 'zzz', 'val3' => '3' )
);
Upvotes: 2