2011-10-06 4 views
1

Je cherche un moyen de faire une fusion de tableau assez étrange entre les tableaux multidimensionnels. Prenez les deux tableaux suivants arrayOne et arrayTwo comme exemples.Fusionner le tableau php basé sur deux valeurs uniques

J'aimerais fusionner les tableaux en arrayThree, qui affichera les éléments de tableaux qui sont uniques si à la foisnumber et letter combinés sont uniques. Il va fusionner les valeurs d'un tableau avec un autre et si la valeur n'est pas présente, alors il fournira une chaîne vide. (Voir arrayThree pour ce que je veux dire)

Des idées?

$arrayOne = array(
     array('number' => 1, 'letter' => 'a', 'qcol' => 'tennis'), 
     array('number' => 1, 'letter' => 'b', 'qcol' => 'soccer'), 
     array('number' => 2, 'letter' => 'a', 'qcol' => 'basketball'), 
     array('number' => 2, 'letter' => 'b', 'qcol' => 'football'), 
     array('number' => 3, 'letter' => 'a', 'qcol' => 'bowling'), 
     array('number' => 3, 'letter' => 'b', 'qcol' => 'rugby') 
    ); 

$arrayTwo = array(
     array('number' => 1, 'letter' => 'a', 'rval' => 'bus'), 
     array('number' => 1, 'letter' => 'b', 'rval' => 'car'), 
     array('number' => 2, 'letter' => 'a', 'rval' => 'truck'), 
     array('number' => 2, 'letter' => 'b', 'rval' => 'plane'), 
     array('number' => 4, 'letter' => 'b', 'rval' => 'boat') 
    ); 

fusionneriez dans:

$arrayThree = array(
     array('number' => 1, 'letter' => 'a', 'rval' => 'bus', 'qcol' => 'tennis'), 
     array('number' => 1, 'letter' => 'b', 'rval' => 'car', 'qcol' => 'soccer'), 
     array('number' => 2, 'letter' => 'a', 'rval' => 'truck', 'qcol' => 'basketball'), 
     array('number' => 2, 'letter' => 'b', 'rval' => 'plane', 'qcol' => 'football'), 
     array('number' => 3, 'letter' => 'a', 'rval' => '', 'qcol' => 'bowling'), 
     array('number' => 3, 'letter' => 'b', 'rval' => '', 'qcol' => 'rugby'), 
     array('number' => 4, 'letter' => 'b', 'rval' => 'boat', 'qcol' => '') 
    ); 

Répondre

3
$arrayThree = array(); 

foreach ($arrayOne as $i) { 
    $arrayThree[$i['number'] . $i['letter']] = $i + array('rval' => null); 
} 
foreach ($arrayTwo as $i) { 
    $key = $i['number'] . $i['letter']; 
    if (isset($arrayThree[$key])) { 
     $arrayThree[$key]['rval'] = $i['rval']; 
    } else { 
     $arrayThree[$key] = $i + array('qcol' => null); 
    } 
} 

$arrayThree = array_values($arrayThree); 
Questions connexes