Como adicionar elementos a uma matriz vazia no PHP?

488

Se eu definir uma matriz em PHP como (não defino seu tamanho):

$cart = array();

Simplesmente adiciono elementos usando o seguinte?

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

As matrizes no PHP não têm um método add, por exemplo cart.add(13),?

AquinasTub
fonte

Respostas:

802

Tanto array_pusho método que você descreveu funcionarão.

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

É o mesmo que:

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

// Or 
$cart = array();
array_push($cart, 13, 14);
?>
Bart S.
fonte
178
Conforme declarado na documentação do PHP, se você estiver pressionando apenas um único elemento todas as vezes (como em um loop) ou um único elemento uma vez, é melhor usar o $cart[] = 13método não apenas porque há menos caracteres para fazer a mesma operação, mas também não impõe a sobrecarga de desempenho de uma chamada de função, o que array_push () faria. Edit: Mas, ótima resposta. Efetivamente o mesmo, e a maioria dos usos nem percebe uma diferença de desempenho, mas ajuda a conhecer essas nuances.
precisa saber é o seguinte
67
Sou eu ou a $cart[]=...sintaxe, à primeira vista, parece uma atribuição de variável e não um array_push implícito?
Brad Hein
6
Definitivamente faz para mim. Eu não me importaria de explicar por que não é uma tarefa.
Limeandcoconut
4
$ carrinho [] = 13; é mais rápido. tem menos caracteres e parece melhor.
Gal Bracha
19
Vou apenas oferecer meu ponto de vista alternativo de que é MUITO confuso para outros programadores de linguagem lerem a sintaxe do carrinho [] = ..., tenho experiência com muitas linguagens e nunca acho que isso é o que faz.
Erti-Chris Eelmaa 13/10
75

É melhor não usar array_pushe apenas usar o que você sugeriu. As funções apenas adicionam sobrecarga.

//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
fonte
11
"Se você estiver adicionando vários valores a uma matriz em um loop, é mais rápido usar array_push do que repetidas [] = declarações" php.net/manual/en/function.array-push.php#84959
Ollie Glass
3
Absolutamente correto se o seu caso de uso estiver adicionando um único item ou itens, um de cada vez. Se todos os valores forem conhecidos ao mesmo tempo, provavelmente é melhor usar a notação array_push dependendo de quantos itens devem ser adicionados. Os caracteres extras ao digitar novamente o nome da matriz a cada vez podem ser mais um impedimento de desempenho do que a chamada de função a sobrecarga. Como sempre, o julgamento deve ser exercido na escolha. Boas respostas!
precisa saber é o seguinte
2
Esta resposta é a mais completa.
Lokiare
10

Você pode usar array_push . Ele adiciona os elementos ao final da matriz, como em uma pilha.

Você também poderia ter feito assim:

$cart = array(13, "foo", $obj);
e eu
fonte
10

Com base na minha experiência, sua solução é ótima (melhor) quando as chaves não são importantes:

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

Lembre-se, esse método substitui a primeira matriz, portanto, use somente quando tiver certeza!

$arr1 = $arr1 + $arr2;

( ver fonte )

T.Todua
fonte
1
Por que o voto negativo, alguém pode explicar por que isso é ruim? isso é inseguro?
Sandy
4
@SandyBeach não é uma resposta
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
fonte
$ carrinho [] = $ i; - essa parte do código adiciona elementos à matriz ----> $ cart = [$ i]; - isso vai passar compilador mas você não vai conseguir o que deseja
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
fonte
-1

Quando alguém deseja que elementos sejam adicionados com a indexação de elementos com base em zero, acho que isso também funcionará:

// 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';
Equipe Gestix
fonte