2009-10-28 9 views
0

Je ne suis pas sûr de savoir comment faire cela. Disons que j'ai 2 tableaux associatifsFusion de plusieurs tableaux associatifs en PHP

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3"); 
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7"); 

Comment pourrais-je produire un tableau « add-up » comme ci-dessous

$arr1 = array(
    array('a', "1", "9"), 
    array('b', "2", "8"), 
    array('c', "3", "7") 
); 

Je ne sais pas si la syntaxe ci-dessus est correcte. Si ce n'est pas, alors un add-up qui ressemble ci-dessous fera trop

$arr1 = array(
    'a' => array("1", "9"), 
    'b' => array("2", "8"), 
    'c' => array("3", "7") 
); 

Merci

+2

ne pas dire 'array ('a' => array ('1', '9'), ...'? – SilentGhost

+0

@SilentGhost, Probablement, je n'ai pas beaucoup d'expérience avec plusieurs niveaux imbriqués de tableaux associatifs, mais votre format devrait faire le travail aussi – drummer

Répondre

0
$arr1 = array('a' => "1", 'b' => "2", 'c' => "3"); 
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7"); 

$summ=array(); 
foreach(array($arr1,$arr2) as $arr){ 
    $keys=array_keys($arr); 
    foreach($keys as $key){ 
     if(isset($summ[$key])) 
      $summ[$key][]=$arr[$key]; 
     else $summ[$key]=array($arr[$key]; 
    } 
} 
/* 
This will have made: 
$sum = array( 
    'a' => array("1", "9"), 
    'b' => array("2", "8"), 
    'c' => array("3", "7") 
); 

I leave it up to you to now reduce this one more step to match your desired output. 
*/ 
+0

SilentGhost a eu le meilleur si c'est seulement 2 tableaux et ils ont les mêmes clés. Si les clés peuvent varier ou si vous avez besoin d'une mise à l'échelle à partir de 2 baies, cela est plus proche de ce dont vous avez besoin. –

+0

Bon point. Je pense qu'ils peuvent probablement varier. Par exemple 1 tableau pourrait avoir un b d (non c), mais l'autre a b c (non d). Dans ce cas, j'en aurai besoin en tant que b c d mais avec des blancs insérés pour ce qui manque pour l'un ou l'autre. Vous dites que cela fera mieux que l'autre? – drummer

3
foreach($arr1 as $k=>$v) { 
    $new[$k] = array($v, $arr2[$k]); 
} 

Est-ce que je pense que vous voulez. Mais si je ne me trompe pas, vous pouvez le faire:

foreach($arr1 as $k=>$v) { 
    $new[] = array($k, $v, $arr2[$k]); 
} 
+0

votre deuxième formulaire va générer ce qu'il cherchait Cela suppose que les deux tableaux associatifs –

+0

vrai, il n'a jamais été conçu pour être plus sophistiqué.Il est assez facile de produire une solution plus générale, pas sûr que l'OP en a besoin – SilentGhost

+0

Merci à vous deux :) J'ai testé, et ça ressemble à Ben répondre correspond mieux, mais j'ai toujours un petit bug avec les blancs. Je vais ouvrir une autre question – drummer

Questions connexes