remplacer la matrice de touches avec touches correspondantes
J'ai un tableau comme ci-dessous
$old = array(
'a' => 'blah',
'b' => 'key',
'c' => 'amazing',
'd' => array(
0 => 'want to replace',
1 => 'yes I want to'
)
);
J'ai un autre tableau ayant les clés pour remplacer avec de l'information clé.
$keyReplaceInfoz = array('a' => 'newA', 'b' => 'newB', 'c' => 'newC', 'd' => 'newD');
J'ai besoin de remplacer les touches du tableau de $old
avec des valeurs respectives de tableau $keyReplaceInfo
.
Sortie devrait ressembler à ceci
$old = array(
'newA' => 'blah',
'newB' => 'key',
'newC' => 'amazing',
'newD' => array(
0 => 'want to replace',
1 => 'yes I want to'
)
);
J'ai eu à le faire manuellement comme ci-dessous. Je suis dans l'attente d'une meilleure option. quelqu'un peut-il proposer la meilleure façon d'accomplir cette?
$new = array();
foreach ($old as $key => $value)
{
$new[$keyReplaceInfoz[$key]] = $value;
}
Je sais que cela peut être plus simple.
OriginalL'auteur Maulik Vora | 2012-07-30
Vous devez vous connecter pour publier un commentaire.
Je pense que cela ressemble plus facile que ce que vous avez posées.
array_combine
ne fonctionnera que si les clés et les valeurs sont dans l'ordre correct, et il y a un remplacement pour chaque touche. (J'ai regardé cela comme une solution moi-même).En fait le seul problème est que cela ne fonctionnera pas si il n'y a pas de remplacement pour chaque touche. La commande n'est pas un problème parce que de array_merge($ancien, $keyReplaceInfoz).
Il ya un couple de problèmes, à la fois liée au nombre d'éléments. Si le remplacement du tableau contient une clé qui n'est pas dans l'ancien tableau, il y aura un PHP warning (et rien ne pourra être remplacé). Si le remplacement de tableau manque une clé de l'ancien tableau, la clé dans l'ancien tableau sera remplacé par son propre valeur
Vous êtes de droite. La ligne fait des hypothèses sur la structure de $keyReplaceInfoz, l'interlocuteur doit préciser si toutes les clés seraient disponibles ou pas.
ahh désolé, je suis en train de lire ces commentaires après ces années, merci @Invocateur pour la création de l'aide à ce moment, Et oui pour ma question et cas, j'ai eu de nouvelles clés disponibles pour chaque et chaque paire de clés anciennes.
OriginalL'auteur Summoner
Adaptation @shawn-k de la solution, ici, c'est plus propre code à l'aide de array_walk, il suffira de le remplacer touche de votre choix, bien sûr, vous pouvez modifier selon votre convenance
OriginalL'auteur girish2040
Je viens de résoudre ce même problème dans ma propre application, mais pour mon application $keyReplaceInfoz actes comme la liste blanche - si une clé n'est pas trouvée, l'ensemble de l'élément est supprimé du tableau, tandis que la mise en correspondance dans la liste blanche des touches traduit les nouvelles valeurs.
Je suppose que vous pourriez appliquer ce même algorithme peut-être avec moins de code par l'habile utilisation de array_map (http://php.net/manual/en/function.array-map.php), qui est peut-être un autre généreux lecteur fera.
OriginalL'auteur Shawn K
- Ce la solution que j'ai mis en œuvre pour le même sujet:
Parce que cette méthode n'avez pas besoin d'avoir une clé de rechange pour chaque clé du tableau source. La méthode indiquée dans la question donnera une erreur si aucune touche de la source matrice n'existe pas sur le remplacement de tableau de clés
Vous avez raison Juan, mais j'étais sûr que je vais avoir toutes les clés disponibles pour le remplacement. la question était d'améliorer la méthode. votre méthode ne fonctionne toujours de la même boucle!
Je vois, @MaulikVora, oui, vous avez raison
OriginalL'auteur Juan Antonio Tubío
Cela devrait faire l'affaire, tant que vous avez le même nombre de valeurs et le même ordre.
OriginalL'auteur Magarusu
Cette question est vieux, mais puisqu'il s'agit en premier sur Google, j'ai pensé ajouter la solution.
Résultat:
OriginalL'auteur Mark Thomson
merci, j'ai mis mon code rapidement et je n'ai pas vérifier.
OriginalL'auteur chenio
OriginalL'auteur chenio