Jak dodać elementy do pustej tablicy w PHP?


488

Jeśli zdefiniuję tablicę w PHP, taką jak (nie definiuję jej rozmiaru):

$cart = array();

Czy po prostu dodam do niego elementy, wykonując następujące czynności?

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

Czy tablice w PHP nie mają na przykład metody dodawania cart.add(13)?

Odpowiedzi:


802

Oba array_pushi opisana metoda będzie działać.

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

Jest taki sam jak:

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

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

178
Jak stwierdzono w dokumentacji PHP, jeśli wypychasz tylko jeden element za każdym razem (jak w pętli) lub jeden element, najlepiej użyć tej $cart[] = 13metody nie tylko dlatego, że jest mniej znaków do wykonania tej samej operacji, ale nie nakłada również obciążenia związanego z wydajnością wywołania funkcji, które miałaby array_push (). Edycja: Ale świetna odpowiedź. Skutecznie to samo, a większość zastosowań nawet nie zauważy różnicy w wydajności, ale pomaga poznać te niuanse.
Mattygabe 15.01.11

67
Czy to tylko ja, czy też $cart[]=...składnia, na pierwszy rzut oka, wygląda jak zmienne przypisanie, a nie domyślna tablica_push?
Brad Hein

6
To zdecydowanie mi odpowiada. Nie miałbym nic przeciwko wyjaśnieniu, dlaczego nie jest to zadanie.
limeandcoconut

4
$ koszyk [] = 13; jest szybszy. ma mniej postaci i wygląda lepiej.
Gal Bracha,

19
Po prostu przedstawię mój alternatywny punkt widzenia, że ​​BARDZO mylące jest dla innych programistów języków czytanie składni cart [] = ..., mam doświadczenie z wieloma językami i nigdy nie sądzę, że tak właśnie działa.
Erti-Chris Eelmaa

75

Lepiej nie używać array_pushi po prostu używać tego, co zasugerowałeś. Funkcje po prostu dodają koszty ogólne.

//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
„Jeśli dodajesz wiele wartości do tablicy w pętli, szybsze jest użycie array_push niż wielokrotne [] = instrukcje” php.net/manual/en/function.array-push.php#84959
Ollie Glass

3
Absolutnie poprawne, jeśli twój przypadek użycia polega na dodawaniu pojedynczego elementu lub elementów pojedynczo. Jeśli wszystkie wartości są znane w tym samym czasie, prawdopodobnie najlepiej jest po prostu użyć notacji tablica_push w zależności od liczby elementów, które należy dodać, dodatkowe znaki z ponownego wpisywania nazwy tablicy za każdym razem mogą stanowić większą przeszkodę w wydajności niż wywołanie funkcji nad głową. Jak zawsze, przy dokonywaniu wyboru należy dokonywać oceny. Dobre odpowiedzi!
Mattygabe 15.01.11

2
Ta odpowiedź jest najbardziej kompletna.
Lokiare

10

Możesz użyć array_push . Dodaje elementy na końcu tablicy, jak na stosie.

Mógłbyś to zrobić w ten sposób:

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

10

Z mojego doświadczenia wynika, że ​​rozwiązanie jest w porządku (najlepsze), gdy klucze nie są ważne:

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

2

PAMIĘTAJ, ta metoda zastępuje pierwszą tablicę, więc używaj jej tylko wtedy, gdy masz pewność!

$arr1 = $arr1 + $arr2;

( patrz źródło )


1
Po co głosować, czy ktoś może wyjaśnić, dlaczego to jest złe? czy to jest niepewne?
Sandy

4
@SandyBeach to nie jest odpowiedź
Mate

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

$ koszyk [] = $ i; - ta część kodu dodaje elementy do tablicy ----> $ cart = [$ i]; - to minie kompilator, ale nie dostaniesz tego, czego chcesz
unpluggeDloop

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

Kiedy ktoś chce dodawać elementy z indeksowaniem elementów od zera, myślę, że to też zadziała:

// 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';
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.