2010-09-30 11 views
1

Y a-t-il un moyen de remplacer les valeurs d'un tableau par les valeurs d'un autre qui a des clés identiques?PHP - remplace les valeurs du tableau par un autre tableau

$arr1 = Array 
     (
      [key1] => var1 
      [key2] => var2 
     ) 
$arr2 = Array 
     (
      [key1] => var3 
      [key2] => var4 
     ) 

Je souhaite modifier les valeurs de $ Arr1 à ceux de im $ arr2 faisant cela environ 10 fois, et je peux le faire ligne par ligne, mais im me demandais s'il y a un moyen plus simple. Merci!

Répondre

2

Vérifiez la fonction array_merge() de php.

$arr1 = array_merge($arr1,$arr2); 
+0

coutume qui créent juste le double des clés? EDIT: ça a marché, merci! – Diesal11

+1

Cela dépend de ce que vous utilisez pour les clés de votre tableau. Les clés de chaîne prendront la valeur du 2nd, les touches numériques s'ajouteront. – Disgone

+0

@ Diesal11 Non. – NullUserException

-1

Vous pouvez essayer ceci:

$new_array = array_combine($arr1, $arr2); 
+0

array_merge() comme NullUserException posté est probablement le meilleur moyen d'aller. L'une ou l'autre méthode fonctionnerait si les clés étaient identiques. – jeremysawesome

+1

Désolé, ceci est faux. Il créerait 'array ('var1' => 'var3', 'var2' => 'var4')' –

+1

@Felix - Merci d'avoir rattrapé ça - je me tiens corrigé. C'est certainement la mauvaise façon de faire ce que veut le PO. C'est la bonne façon de le faire avec array_combine, array_combine (array_flip ($ arr1), $ arr2); ' – jeremysawesome

4

Si les touches dans le tableau 1 et 2 sont identiques:

$arr1 = $arr2; 

Si toutes les clés de la matrice 2 sont garantis dans le tableau 1 (le tableau 2 est un sous-ensemble du tableau 1):

$arr1 = array_merge($arr1, $arr2); 

Si certaines clés du tableau 2 ne se trouvent pas dans le tableau 1, seules les clés du tableau 1 doivent être remplacées (le tableau 2 n'est pas un sous-ensemble du tableau 1, et vous ne voulez fusionner que la partie entrecroisée):

$arr1 = array_merge($arr1, array_intersect_key($arr2, $arr1)); 
+0

fonctionnerait aussi (le premier) mais l'étape suivante remplacerait $ arr2 par des valeurs de $ arr3, donc je pense que array_merge fonctionnerait mieux – Diesal11

+1

@Diesal Si '$ arr1 = $ arr2' fonctionne réellement pour vous, vous ne voulez pas vraiment * fusionner * les tableaux autant que * remplacer une variable * en gros. Peut-être qu'avec un peu plus de code nous pourrions vous recommander une meilleure façon de faire ce que vous essayez de faire. – deceze

+0

bien à la fin il remonte aux rangées dans MYSQL, im remplaçant réellement les valeurs des colonnes d'une rangées avec la rangée suivante. Je ne l'ai pas encore entièrement écrit. donc c'est tout ce que je peux vous donner atm – Diesal11

0

Si vous avez besoin de préserver un ordre du tableau, utilisez array_replace:

$a = array('a' => 1, 'b' => 2, 'c' => 3 ); 
    $b = array(   'b' => 20, 'c' => 30); 

    $r = array_replace($a, $b) 

    // $r = array('a' => 1, 'b' => 20, 'c' => 30); 
1

suffit d'utiliser la fonction de remplacement.

$arr1 = array_replace($arr1, $arr2); 

ou mieux de si vous voulez traiter un tableau multidimensionnel, utilisez remplacer récursive.

$arr1 = array_replace_recursive($arr1, $arr2); 

Pour plus de détails vérifier ces liens array_replace(), array_replace_recursive()

Questions connexes