Come aggiungere elementi a un array vuoto in PHP?


488

Se definisco un array in PHP come (Non definisco le sue dimensioni):

$cart = array();

Devo semplicemente aggiungere elementi ad esso usando quanto segue?

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

Le matrici in PHP non hanno un metodo add, ad esempio cart.add(13)?

Risposte:


802

Sia array_pushil metodo che hai descritto funzioneranno.

$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>";

Equivale a:

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

// Or 
$cart = array();
array_push($cart, 13, 14);
?>

178
Come indicato nella documentazione di PHP, se stai solo spingendo un singolo elemento ogni volta (come in un ciclo) o un singolo elemento una volta, è meglio usare il $cart[] = 13metodo non solo perché sono meno caratteri per fare la stessa operazione, ma inoltre non impone l'overhead delle prestazioni di una chiamata di funzione, che sarebbe array_push (). Modifica: Ma, ottima risposta. In effetti lo stesso, e la maggior parte degli usi non noterà nemmeno una differenza di prestazioni, ma aiuta a conoscere quelle sfumature.
Mattygabe,

67
Sono solo io o la $cart[]=...sintassi, a prima vista, sembra un'assegnazione variabile e non un array_push implicito?
Brad Hein,

6
Lo fa sicuramente per me. Non mi dispiacerebbe una spiegazione del perché non è un compito.
limeandcoconut,

4
$ cart [] = 13; è più veloce. ha meno personaggi e ha un aspetto migliore.
Gal Bracha,

19
Offrirò solo il mio punto di vista alternativo che è MOLTO confuso per gli altri programmatori di lingue leggere la sintassi di cart [] = ..., ho esperienza con molte lingue e non avrei mai immaginato che sia quello che fa.
Erti-Chris Eelmaa,

75

È meglio non usare array_pushe usare solo ciò che hai suggerito. Le funzioni aggiungono semplicemente sovraccarico.

//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';

11
"Se stai aggiungendo più valori a un array in un ciclo, è più veloce usare array_push che ripetute [] = istruzioni" php.net/manual/en/function.array-push.php#84959
Ollie Glass

3
Assolutamente corretto se il tuo caso d'uso sta aggiungendo uno o più articoli uno alla volta. Se tutti i valori sono noti allo stesso tempo, probabilmente è meglio usare solo la notazione array_push a seconda di quanti elementi devono essere aggiunti, i caratteri extra dalla riscrittura del nome dell'array ogni volta potrebbero essere più un ostacolo alle prestazioni che la chiamata di funzione over-head. Come sempre, il giudizio dovrebbe essere esercitato nella scelta. Buone risposte!
Mattygabe,

2
Questa risposta è la più completa.
Lokiare,

10

Puoi usare array_push . Aggiunge gli elementi alla fine dell'array, come in uno stack.

Avresti potuto farlo anche in questo modo:

$cart = array(13, "foo", $obj);

10

Sulla base della mia esperienza, la tua soluzione va bene (la migliore) quando le chiavi non sono importanti:

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

2

RICORDA, questo metodo sovrascrive il primo array, quindi usalo solo quando sei sicuro!

$arr1 = $arr1 + $arr2;

( vedi fonte )


1
Perché il downvote, qualcuno può spiegare perché questo è male? è insicuro?
Sandy,

4
@SandyBeach non è una risposta
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>";

$ cart [] = $ i; - quella parte del codice aggiunge elementi alla matrice ----> $ cart = [$ i]; - questo passerà al compilatore ma non otterrai quello che vuoi
scollegaDloop

0
$products_arr["passenger_details"]=array();
array_push($products_arr["passenger_details"],array("Name"=>"Isuru Eshan","E-Mail"=>"isuru.eshan@gmail.com"));
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>";
}

-1

Quando si desidera aggiungere elementi con l'indicizzazione di elementi in base zero, immagino che funzionerà anche questo:

// 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';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.