2009-05-15 11 views
3

J'ai deux tableaux:Tableau de fusion/Remplacer

Array 
(
    [2005] => 0 
    [2006] => 0 
    [2007] => 0 
    [2008] => 0 
    [2009] => 0 
) 

Array 
(
    [2007] => 5 
    [2008] => 6.05 
    [2009] => 7 
) 

Je veux fusionner ces deux tableaux de telle sorte que si une valeur existe dans le 2ème tableau, il remplace la valeur du premier tableau. Donc, le tableau qui en résulte serait:

Array 
(
    [2005] => 0 
    [2006] => 0 
    [2007] => 5 
    [2008] => 6.05 
    [2009] => 7 
) 

Merci pour votre aide.

MISE À JOUR: Ce fut ma meilleure tentative, mais il est follement sans succès:

$final = ''; 
    foreach ($years as $k => $v){ 
     if (in_array($k,$values)){ 
      $final .= $values[$k] . '|'; 
     }else{ 
      $final .= $k[$v] . '|'; 
     } 

    } 

    echo "final = $final"; 
+0

Pour ne pas avoir l'air d'avoir des raisins verts ou quoi que ce soit, mais il n'y a pas besoin d'écrire une fonction pour ça quand PHP a déjà un opérateur qui le fait. Vois ma réponse. –

Répondre

26

Comme je l'ai tout récemment appris, PHP a un array union operator qui fait exactement ceci:

$result = $a + $b; 

Si un $ est le tableau avec les valeurs que vous souhaitez avoir la priorité. . (Donc, dans votre exemple, cela signifie que le second tableau est « $a »

+0

et si les tableaux avaient des chaînes vides? ce scénario je suis tombé sur beaucoup. $ resultat = array_filter ($ a) + $ b; supprimerait toutes les chaînes vides dans $ a, puis "fusionner" avec $ b, puis réorganiser l'index avec sort() – Dheeraj

+0

J'ai trouvé une belle image et une description expliquent la différence complète: https://softonsofa.com/php -array_merge-vs-array_replace-vs-plus-aka-union/ –

1

Je ne suis pas familier avec PHP, mais quelque chose comme:

foreach ($array2 as $i => $value) { 
    $array1[$i] = $value; 
} 
+0

Je suppose que j'ai manqué une complexité que vous n'avez peut-être pas expliquée en détail dans la question. –

+0

+1 - c'est certainement le moyen le plus simple et le plus simple de le faire – nickf

3

Eh bien, array merge ne fonctionnera pas parce qu'il a des clés numériques, nous devrions construire une nouvelle fonction pour cela ..

function combine($a1, $a2) 
    foreach ($a2 as $k => $v) { 
     $a1[$k] = $v; 
    } 
    return $a1; 
} 

Voilà.

+0

Je suppose que vous voulez dire "foreach"? merci, José. – jmccartie

+0

Oh, désolé .. va réparer maintenant. –

+0

Bien que cette fonction ne soit même pas nécessaire (il y a un opérateur intégré qui fait cela), la fonction entière aurait pu être écrite de façon beaucoup plus concise comme (désolé, ne peut pas couper de ligne): foreach ($ a2 as $ k => $ v) $ a1 [$ k] = $ v; return $ a1; –

3

Ca ne peut pas être juste ce simple:

$new_array = array_unique(array_merge($ar1,$ar2)); 

Peut-être que je manque quelque chose ou je suis fou

.
+1

De toutes les réponses, je vous votez, monsieur! – freerunner

+1

'array_unique' fonctionne avec des valeurs et non avec des clés. –

5

Il est aussi simple que cela:

$new_array = array_replace(array_1,array_2);

the php manual page