8
votes

Comment fusionner deux tableaux en ne prenant que les valeurs de la deuxième matrice qui a les mêmes clés que la première?

J'aimerais fusionner deux tableaux les uns avec les autres:

$merged = array(1 => 'a', 3 => 'c*');


0 commentaires

3 Réponses :


19
votes

Cela devrait le faire si je comprends votre logique correctement: xxx


implémentation: xxx

sortie: xxx


5 commentaires

Union contre l'intersection. Mais l'Union ajoutera des clés de $ filtré aussi bienfait. Je vais essayer.


Jup. Je viens de le tester, ma faute;). Cela fonctionne assez bien, seul l'ordre des clés change, mais ce n'est pas un problème car je les ai comme un index numérique, alors Ksort fait le travail. Parfait. Merci beaucoup!


@Deceze array_intersect_key ($ modifié, $ filtré) + $ filtré étrange. Je n'ai jamais vu cela auparavant. Aucune idée de ce qui se passe ici, mais ça marche! Quel est le travail pour + $ filtré


@Le array_intersect_key ($ modifié, $ filtré) prend toutes les valeurs de $ modifié qui ont une clé dans $ filtrée , c'est-à-dire qu'il produit un sous-ensemble de $ filtré avec les valeurs de $ modifié . + $ filtré ajoute ensuite le reste des valeurs à partir de $ filtré dans le résultat, c'est-à-dire qu'il remplit le sous-ensemble sauvegarder pour avoir toutes les clés dans $ filtrées .


Vous voudrez peut-être placer un retour $ modifié quand $ filtré est vide en fonction de votre cas d'utilisation.



0
votes

Si vous voulez que le deuxième tableau ($ B) soit le modèle indiquant que s'il n'y a que la clé là-bas, vous pouvez également essayer ce xxx


0 commentaires

0
votes

Si vos clés sont non numériques (que les vôtres ne le sont pas, il ne s'agit donc pas d'une solution à votre question exacte), vous pouvez utiliser cette technique: xxx

résultat: xxx

Ceci fonctionne car pour des touches non numériques, array_merge écrase les valeurs des touches existantes et ajoute les touches dans $ modifié à la fin du nouveau tableau. Nous pouvons donc simplement supprimer toutes les touches de la fin de la matrice fusionnée plus que le nombre de la matrice d'origine.

Comme cela s'applique à la même question, mais avec des types de clés différents, je pensais la fournir.

Si vous utilisez ceci avec des touches numériques, le résultat est simplement le tableau d'origine ( $ filtré dans ce cas) avec des touches réindexées (c'est-à-dire comme si vous avez utilisé array_values ​​).


0 commentaires