J'ai deux tableaux, l'un avec les ID et une avec les noms:façon élégante de carte deux tableaux à l'autre
$ids = array(4, 13, 6, 8, 10);
$names = array('alice', 'bob', 'charles', 'david', 'elizabeth');
Je dois mettre à jour le db afin que les lignes avec les ids ont les noms dans le tableau. Voici le plus délicat: J'ai aussi deux ints:
$special_name = 2; // the index in $names, in this case we mean 'charles'
$special_id = 13; // the id value
Je ne me soucie pas de quel nom va à l'ID, à l'exception que le nom avec le $special_name
devrait aller sur le $special_id
.
Quelle est la manière la plus élégante d'y arriver? Toutes les méthodes auxquelles je pense semblent plutôt désordonnées. Le meilleur que je l'ai pensé est d'extraire les éléments spéciaux de chaque tableau, et faire en premier, puis le reste, peut-être la construction d'un nouveau tableau comme celui-ci:
$mapped = new array();
$mapped[$special_id] = $names[$special_name];
foreach ($ids as $id) {
if ($id != $special_id) {
$mapped[$id] = current($names);
}
// advance $names pointer
$next_name = next($names);
if ($next_name == $special_name) next($names);
}
Je ne l'ai pas testé que encore (je suis sur le point), mais il est censé produire quelque chose comme:
$mapped = array(13=>'charles', 4=>'alice',6=>'bob', 8=>'david', 10=>'elizabeth');
et en cours d'exécution, puis à travers ce faire la mise à jour réelle. Vous avez une meilleure idée?
MISE À JOUR: ajout de la solution possible ci-dessus. Pendant ce temps quelques réponses sont entrées.
Incroyable. J'étais sur le point de publier une ligne pour la ligne exactement la même solution, sauf l'alimentation 2 args à unset(). creepy lol – goat
@chris même avec les mêmes noms de variables? Oo: D – Gordon
J'ai pensé à utiliser unset, aussi, mais array_combine a glissé dans mon esprit. Cela me semble un peu mieux. Cool, je ne savais pas que vous pouviez ajouter des tableaux comme ça. THX. – sprugman