Comment ajouter un tableau à un autre sans comparer leurs clés?
$a = array( 'a', 'b' );
$b = array( 'c', 'd' );
À la fin, cela devrait être: Array( [0]=>a [1]=>b [2]=>c [3]=>d )
si j'utilise quelque chose comme []
ou array_push
, cela entraînera l'un des résultats suivants:
Array( [0]=>a [1]=>b [2]=>Array( [0]=>c [1]=>d ) )
//or
Array( [0]=>c [1]=>d )
Cela devrait être quelque chose, faire cela, mais d'une manière plus élégante:
foreach ( $b AS $var )
$a[] = $var;
array_merge ($a, $b)
devrait faire exactement ce que vous voulez, au moins avec PHP 5+.array_merge();
la sortiearray_merge();
devrait être exaclty ce que vous avez besoin:print_r(array_merge($a,$b)); // outputs => Array ( [0] => a [1] => b [2] => c [3] => d )
Réponses:
array_merge
est la manière élégante:Faire quelque chose comme:
Ne fonctionnera pas, car l'
+
opérateur ne les fusionne pas réellement. S'ils ont$a
les mêmes clés$b
, cela ne fera rien.la source
Une autre façon de faire cela en PHP 5.6+ serait d'utiliser le
...
jetonCela fonctionnera également avec tout
Traversable
Un avertissement cependant:
$b
s'agit d'un tableau vide ou non traversable, par exemple pas un tableau$b
n'est pas traversablela source
...
communément appelé lesplat operator
php.array_push
accepte un seul argument depuis php 7.3, ce qui évite les erreurs avec des tableaux vides.Pourquoi ne pas utiliser
Pourquoi ne voulez-vous pas utiliser cela, la bonne méthode intégrée.
la source
PHP append one array to another (not array_merge or array_push)
... modifiée par la suitePHP append one array to another (not array_merge or +)
avant d'être remplacée par son titre actuelC'est un article assez ancien, mais je veux ajouter quelque chose sur l'ajout d'un tableau à un autre:
Si
vous pouvez utiliser des fonctions de tableau comme ceci:
array_merge ne fusionne pas les clés numériques, il ajoute donc toutes les valeurs de $ appendArray. Tout en utilisant des fonctions php natives au lieu d'une boucle foreach, cela devrait être plus rapide sur les tableaux avec beaucoup d'éléments.
Ajout 2019-12-13: Depuis PHP 7.4, il y a la possibilité d'ajouter ou de pré-ajouter des tableaux de la manière Array Spread Operator:
Comme précédemment, les clés peuvent être un problème avec cette nouvelle fonctionnalité:
"Erreur fatale: erreur non interceptée: impossible de décompresser le tableau avec les clés de chaîne"
tableau (4) {[1] => int (1) [4] => int (2) [5] => int (3) [6] => int (4)}
tableau (3) {[0] => int (1) [1] => int (4) [3] => int (3)}
la source
Production:
Code source de référence
la source
Pour un grand tableau, il est préférable de concaténer sans array_merge, pour éviter une copie de la mémoire.
la source
Suite aux réponses de bstoney et Snark, j'ai fait quelques tests sur les différentes méthodes:
Ce qui produit:
ORIGINAL: Je pense qu'à partir de PHP 7, la méthode 3 est une alternative bien meilleure en raison de la façon dont les boucles foreach agissent maintenant , qui consiste à faire une copie du tableau en cours d'itération.
Bien que la méthode 3 ne soit pas strictement une réponse aux critères de 'not array_push' dans la question, c'est une ligne et la plus haute performance à tous égards, je pense que la question a été posée avant que la syntaxe ... soit une option.
MISE À JOUR 25/03/2020: J'ai mis à jour le test qui était défectueux car les variables n'étaient pas réinitialisées. Fait intéressant (ou confus), les résultats montrent maintenant que le test 1 est le plus rapide, où il était le plus lent, étant passé de 0,008392 à 0,002717! Cela ne peut être dû qu'aux mises à jour PHP, car cela n'aurait pas été affecté par la faille de test.
Donc, la saga continue, je vais commencer à utiliser array_merge à partir de maintenant!
la source
Depuis PHP 7.4 , vous pouvez utiliser le ... opérateur . Ceci est également connu comme l' opérateur splat dans d'autres langues, y compris Ruby.
Production
L'opérateur Splat devrait avoir de meilleures performances que array_merge . Ce n'est pas seulement parce que l'opérateur splat est une structure de langage alors que array_merge est une fonction, mais aussi parce que l'optimisation du temps de compilation peut être performante pour des tableaux constants.
De plus, nous pouvons utiliser la syntaxe de l'opérateur splat partout dans le tableau, car des éléments normaux peuvent être ajoutés avant ou après l'opérateur splat.
la source
Avant PHP7, vous pouvez utiliser:
array_splice()
fonctionne en référence au tableau (1er argument) et place les valeurs du tableau (4e argument) à la place de la liste des valeurs démarrées à partir du 2e argument et du nombre du 3e argument. Lorsque nous définissons le 2e argument comme fin du tableau source et le 3e comme zéro, nous ajoutons les valeurs du 4e argument au 1er argumentla source
si vous souhaitez fusionner un tableau vide avec une nouvelle valeur existante. Vous devez d'abord l'initialiser.
J'espère que son aide.
la source
la boucle foreach est plus rapide que array_merge pour ajouter des valeurs à un tableau existant, choisissez donc la boucle à la place si vous souhaitez ajouter un tableau à la fin d'un autre.
la source
Que dis-tu de ça:
la source
'0' => 'a'
... au lieu de0 => 'a'
?array + array