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),?

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);
?>

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

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

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;

2

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

$arr1 = $arr1 + $arr2;

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

$ 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"=>"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 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';
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.