En PHP, comment voulez-vous changer la clé d'un élément de tableau?
J'ai un tableau associatif dans le formulaire key => value
où la clé est une valeur numérique, mais ce n'est pas séquentielle valeur numérique. La clé est en fait un numéro d'identification et la valeur est un nombre. C'est très bien pour la plupart des cas, cependant, je veux une fonction qui récupère le nom lisible par l'utilisateur de la matrice et qui utilise pour la clé, sans modification de la valeur.
Je n'ai pas vu une fonction qui fait cela, mais je suppose que j'ai besoin de fournir la clé ancienne et de la nouvelle clé (les deux que j'ai) et de transformer le tableau. Est-il un moyen efficace de faire cela?
- Voir similaires stackoverflow.com/q/308703
Vous devez vous connecter pour publier un commentaire.
La façon de le faire et de préserver l'ordre du tableau est en mettant les clés du tableau dans un tableau séparé, trouver et remplacer la clé de ce tableau et de les combiner avec les valeurs.
Voici une fonction qui ne fait que cela:
si votre
array
est construite à partir d'une requête de base de données, vous pouvez modifier la clé directement à partir de lamysql
déclaration:au lieu de
utiliser quelque chose comme:
La réponse de KernelM est sympa, mais pour éviter la question soulevée par Greg dans le commentaire (en conflit clés), à l'aide d'un nouveau tableau serait plus sûr
Vous pouvez utiliser un deuxième tableau associatif des cartes lisibles par l'homme noms de l'id. Qui serait également un Nombre de 1 relation. Puis faire quelque chose comme ceci:
Si vous souhaitez vous aussi la position de la nouvelle clé du tableau pour être le même que l'ancien, vous pouvez le faire:
Si votre tableau est récursive vous pouvez utiliser cette fonction:
test de ces données:
voici la fonction:
J'aime KernelM de la solution, mais j'ai besoin de quelque chose qui permettrait de gérer le potentiel de conflits clé (où une nouvelle clé peut correspondre à une clé existante). Voici ce que j'ai trouvé:
Vous pouvez ensuite parcourir un tableau comme ceci:
Ici est une fonction d'assistance à la réaliser:
assez basé sur @KernelM répondre.
Utilisation:
Il sera de retour vrai sur le succès de la renommer, sinon faux.
De choses simples:
cette fonction peut accepter la cible $hash et $remplacement est également une table de hachage contenant newkey=>oldkey associations.
Cette fonction préserver l'ordre original, mais pourrait être problématique pour les très gros (comme au-dessus de 10k enregistrements) des tableaux concernant performance & mémoire.
cette fonction alternative serait de faire la même chose, avec des performances bien meilleures & utilisation de la mémoire, au prix de perdre de commande d'origine (qui ne devrait pas être un problème car il est à la table de hachage!)
ce code va vous aider à changer la oldkey à nouveau
afficher comme
cela fonctionne pour renommer la première clé:
puis, print_r($a) rend une réparés dans l'ordre de tableau:
cela fonctionne pour renommer une clé arbitraire:
print_r($a)
une fonction généralisée:
Si vous souhaitez remplacer plusieurs touches à la fois (le maintien de l'ordre):
Utilisation:
Il y a un autre moyen pour changer la clé d'un élément de tableau lorsque l'on travaille avec une gamme complète - sans modification de l'ordre de la matrice.
C'est tout simplement de copier le tableau dans un nouveau tableau.
Par exemple, je travaillais avec un mixte, un tableau multi-dimensionnel que les contenus indexés à la vie associative et les touches - et j'ai voulu remplacer l'entier touches avec leurs valeurs, sans rupture de l'ordre.
Je l'ai fait en changeant de clé/valeur pour tous tableau numérique entrées - ici: ['0'=>'foo']. Notez que la commande est intact.
De sortie:
Vous pouvez utiliser cette fonction sur la base d'array_walk:
Il donne:
Hmm, je ne suis pas tester avant, mais je pense que ce code de travail
Qui les sauveurs de la commande c'est simple à comprendre:
meilleure façon est d'utiliser de référence, et non pas à l'aide de la fonction unset (qui en font une étape de nettoyage de la mémoire)
solution:
vous avez un original et une référence avec un nouveau nom.
ou si vous ne voulez pas avoir deux noms dans une valeur qui est bon de faire un autre onglet et foreach sur la référence
Iterration est mieux sur les touches de cloner toutes les array, et nettoyage de l'ancien tableau si vous avez des données d'une longueur de 100 lignes +++ etc..
Vous pouvez écrire une fonction simple qui s'applique le rappel sur les touches du tableau donné. Semblable à array_map
Voici l'essentiel https://gist.github.com/vardius/650367e15abfb58bcd72ca47eff096ca#file-array_map_keys-php.