Comment ajouter des éléments à un tableau vide en PHP?

488

Si je définis un tableau en PHP tel que (je ne définis pas sa taille):

$cart = array();

Dois-je simplement y ajouter des éléments en utilisant ce qui suit?

$cart[] = 13;
$cart[] = "foo";
$cart[] = obj;

Les tableaux en PHP n'ont-ils pas de méthode add, par exemple cart.add(13)?

AquinasTub
la source

Réponses:

802

Les deux array_pushet la méthode que vous avez décrite fonctionneront.

$cart = array();
$cart[] = 13;
$cart[] = 14;
// etc

//Above is correct. but below one is for further understanding
$cart = array();
for($i=0;$i<=5;$i++){
    $cart[] = $i;  
}
echo "<pre>";
print_r($cart);
echo "</pre>";

Est le même que:

<?php
$cart = array();
array_push($cart, 13);
array_push($cart, 14);

// Or 
$cart = array();
array_push($cart, 13, 14);
?>
Bart S.
la source
178
Comme indiqué dans la documentation PHP, si vous ne poussez qu'un seul élément à chaque fois (comme dans une boucle) ou un seul élément une fois, il est préférable d'utiliser la $cart[] = 13méthode non seulement parce qu'il y a moins de caractères pour effectuer la même opération, mais n'impose pas non plus la surcharge de performance d'un appel de fonction, comme le ferait array_push (). Edit: Mais, bonne réponse. Effectivement les mêmes, et la majorité des utilisations ne remarqueront même pas de différence de performance, mais aident à connaître ces nuances.
Mattygabe
67
Est-ce juste moi ou la $cart[]=...syntaxe, à première vue, ressemble-t-elle à une affectation de variable et non à un array_push implicite?
Brad Hein
6
Ça me fait définitivement du bien. Cela ne me dérangerait pas d'expliquer pourquoi ce n'est pas une mission.
limeandcoconut
4
$ cart [] = 13; est plus rapide. a moins de personnages et semble mieux.
Gal Bracha
19
Je vais simplement proposer mon point de vue alternatif qu'il est TRÈS déroutant pour les autres programmeurs de langage de lire la syntaxe de cart [] = ..., j'ai de l'expérience avec beaucoup de langages et je ne devinerais jamais que c'est ce qu'il fait.
Erti-Chris Eelmaa
75

Il vaut mieux ne pas utiliser array_pushet simplement utiliser ce que vous avez suggéré. Les fonctions ajoutent simplement des frais généraux.

//We don't need to define the array, but in many cases it's the best solution.
$cart = array();

//Automatic new integer key higher than the highest 
//existing integer key in the array, starts at 0.
$cart[] = 13;
$cart[] = 'text';

//Numeric key
$cart[4] = $object;

//Text key (assoc)
$cart['key'] = 'test';
OIS
la source
11
"Si vous ajoutez plusieurs valeurs à un tableau dans une boucle, il est plus rapide d'utiliser array_push que des déclarations [] = répétées
Ollie Glass
3
Absolument correct si votre cas d'utilisation ajoute un ou plusieurs éléments un par un. Si toutes les valeurs sont connues en même temps, il est probablement préférable d'utiliser simplement la notation array_push en fonction du nombre d'éléments à ajouter, les caractères supplémentaires de la recomposition du nom du tableau à chaque fois peuvent être plus un obstacle aux performances que l'appel de fonction aérien. Comme toujours, le jugement doit être exercé lors du choix. Bonnes réponses!
Mattygabe
2
Cette réponse est la plus complète.
Lokiare
10

Vous pouvez utiliser array_push . Il ajoute les éléments à la fin du tableau, comme dans une pile.

Vous auriez aussi pu le faire comme ceci:

$cart = array(13, "foo", $obj);
et moi
la source
10

D'après mon expérience, votre solution est très bien (la meilleure) lorsque les clés ne sont pas importantes:

$cart = [];
$cart[] = 13;
$cart[] = "foo";
$cart[] = obj;
fico7489
la source
2

N'OUBLIEZ PAS, cette méthode écrase le premier tableau, donc n'utilisez que lorsque vous êtes sûr!

$arr1 = $arr1 + $arr2;

( voir source )

T.Todua
la source
1
Pourquoi le downvote, quelqu'un peut-il expliquer pourquoi c'est mauvais? est-ce pas sûr?
Sandy
4
@SandyBeach ce n'est pas une réponse
mateos
2
$cart = array();
$cart[] = 11;
$cart[] = 15;

// etc

//Above is correct. but below one is for further understanding

$cart = array();
for($i = 0; $i <= 5; $i++){
          $cart[] = $i;  

//if you write $cart = [$i]; you will only take last $i value as first element in array.

}
echo "<pre>";
print_r($cart);
echo "</pre>";
unpluggeDloop
la source
$ cart [] = $ i; - cette partie du code ajoute des éléments au tableau ----> $ cart = [$ i]; - cela passera le compilateur mais vous n'obtiendrez pas ce que vous voulez
unpluggeDloop
0
$products_arr["passenger_details"]=array();
array_push($products_arr["passenger_details"],array("Name"=>"Isuru Eshan","E-Mail"=>"[email protected]"));
echo "<pre>";
echo json_encode($products_arr,JSON_PRETTY_PRINT);
echo "</pre>";

//OR

$countries = array();
$countries["DK"] = array("code"=>"DK","name"=>"Denmark","d_code"=>"+45");
$countries["DJ"] = array("code"=>"DJ","name"=>"Djibouti","d_code"=>"+253");
$countries["DM"] = array("code"=>"DM","name"=>"Dominica","d_code"=>"+1");
foreach ($countries as $country){
echo "<pre>";
echo print_r($country);
echo "</pre>";
}
Isuru Eshan
la source
-1

Lorsque l'on veut que des éléments soient ajoutés avec une indexation des éléments à base zéro, je suppose que cela fonctionnera également:

// adding elements to an array with zero-based index
$matrix= array();
$matrix[count($matrix)]= 'element 1';
$matrix[count($matrix)]= 'element 2';
...
$matrix[count($matrix)]= 'element N';
Équipe Gestix
la source