Imaginons que nous ayons deux tableaux:
$array_1 = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
);
$array_2 = array(
'zero' => '0',
'one' => '1',
'two' => '2',
'three' => '3',
);
Maintenant, je voudrais insérer array('sample_key' => 'sample_value')
après le troisième élément de chaque tableau. Comment puis-je le faire?
Réponses:
array_slice()
peut être utilisé pour extraire des parties du tableau, et l' opérateur de tableau+
union ( ) peut recombiner les parties.Cet exemple:
donne:
la source
+
ne doit pas être utilisé! Utilisezarray_merge
plutôt! BEcause si les indices sont entiers (tableau normal, pas de hachage),+
ne fonctionnera pas comme prévu !!!array_merge
Le comportement de par rapport aux touches numériques n'est pas approprié pour cette question.count($array)-3
vous pouvez simplement spécifier null pour le même effet. De plus, utiliserarray_merge
comme TMS suggéré ne vous obligera pas à utiliser un index unique. EXEMPLE: Ajouter "new-value" à un tableau existant:$b = array_merge( array_slice( $a, 0, 1, true ), array( 'new-value' ), array_slice( $a, 1, null, true ) );
+
vsarray_merge
.. Si vous souhaitez insérer des éléments dans un tableau numérique, vous ne devriez pas l'utiliser+
car il ne correspondra probablement pas à vos attentes. Mais vous ne devriez pas utiliser nonarray_merge
plus; pour les tableaux numériques, tout ce problème est résolu avec laarray_splice
fonction. Pour les tableaux associatifs ou mixtes, vous ne voulez probablement pas que les clés numériques soient réindexées, donc l'utilisation+
est tout à fait appropriée.Pour votre premier tableau, utilisez
array_splice()
:production:
pour le second il n'y a pas d'ordre donc il suffit de faire:
Et triez les clés selon ce que vous voulez.
la source
code:
exemple:
Peut-être pas vraiment parfait, mais cela fonctionne.
la source
Voici une fonction simple que vous pouvez utiliser. Il suffit de brancher et de jouer.
Il s'agit d'insérer par index, pas par valeur.
vous pouvez choisir de transmettre le tableau ou d'en utiliser un que vous avez déjà déclaré.
EDIT: Version plus courte:
Vous pouvez maintenant tester le code en utilisant
Et le résultat est:
la source
la source
Cette fonction prend en charge:
USAGE:
RÉSULTATS:
la source
J'ai récemment écrit une fonction pour faire quelque chose de similaire à ce que vous essayez, c'est une approche similaire à la réponse de clasvdb.
Fondamentalement, il s'insère à un point spécifique, mais évite l'écrasement en déplaçant tous les éléments vers le bas.
la source
Si vous ne savez pas que vous voulez l'insérer à la position n ° 3, mais que vous connaissez la clé que vous voulez insérer après, j'ai concocté cette petite fonction après avoir vu cette question.
Voici un violon du clavier pour le voir en action: http://codepad.org/5WlKFKfz
Remarque: array_splice () aurait été beaucoup plus efficace que array_merge (array_slice ()) mais les clés de vos tableaux insérés auraient été perdues. Soupir.
la source
Approche plus propre (basée sur la fluidité d'utilisation et moins de code).
Usage:
la source
Solution la plus simple, si vous souhaitez insérer (un élément ou un tableau) après une certaine clé:
Donc, si vous avez:
Et exécutez:
Tu vas avoir:
la source
L'utilisation de array_splice au lieu de array_slice donne un appel de fonction en moins.
la source
Je fais ça comme
la source
Je viens de créer une classe ArrayHelper qui rendrait cela très facile pour les index numériques.
Exemple:
Début $ array:
Résultat:
la source
C'est une meilleure méthode pour insérer un élément dans un tableau à une certaine position.
la source
J'avais besoin de quelque chose qui pourrait faire un insert avant, remplacer, après la clé; et ajoutez au début ou à la fin du tableau si la clé cible n'est pas trouvée. La valeur par défaut est d'insérer après la clé.
Nouvelle fonction
Code d'entrée
Production
la source
Réponse très simple en 2 cordes à votre question:
Au début, vous insérez n'importe quoi dans votre troisième élément avec array_splice, puis attribuez une valeur à cet élément:
la source
C'est une vieille question, mais j'ai posté un commentaire en 2014 et j'y reviens fréquemment. J'ai pensé que je laisserais une réponse complète. Ce n'est pas la solution la plus courte mais elle est assez simple à comprendre.
Insérez une nouvelle valeur dans un tableau associatif, à une position numérotée, en préservant les clés et en préservant l'ordre.
la source
Pas aussi concret que la réponse d'Artefacto, mais basé sur sa suggestion d'utiliser array_slice (), j'ai écrit la fonction suivante:
Fonctionnalités:
Exemples d'utilisation:
la source
Si vous cherchez simplement à insérer un élément dans un tableau à une certaine position (en fonction de la réponse @clausvdb):
la source
Voici ma version:
la source
moyen simple .. utilisation
array_splice()
Résultat..
la source
Ceci est une autre solution
PHP 7.1
la source
Vous pouvez insérer des éléments pendant une boucle foreach , puisque cette boucle fonctionne sur une copie du tableau d'origine, mais vous devez garder une trace du nombre de lignes insérées (j'appelle cela "bloat" dans ce code):
Évidemment, vous pouvez généraliser cette idée de «gonflement» pour gérer les insertions et les suppressions arbitraires pendant la boucle foreach.
la source