keepontrying
keepontrying

Reputation: 587

combine two array using common field in php

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

Answers (1)

Barmar
Barmar

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

Related Questions