¿Cómo agregar elementos a una matriz vacía en PHP?

488

Si defino una matriz en PHP como (no defino su tamaño):

$cart = array();

¿Simplemente le agrego elementos usando lo siguiente?

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

¿Las matrices en PHP no tienen un método de agregar, por ejemplo cart.add(13)?

AquinasTub
fuente

Respuestas:

802

Ambos array_pushy el método que describiste funcionarán.

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

Es lo mismo que:

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

// Or 
$cart = array();
array_push($cart, 13, 14);
?>
Bart S.
fuente
178
Como se indica en la documentación de PHP, si solo está presionando un solo elemento cada vez (como en un bucle) o un solo elemento una vez, es mejor usar el $cart[] = 13método no solo porque son menos caracteres para hacer la misma operación, sino que Tampoco impone la sobrecarga de rendimiento de una llamada de función, lo que haría array_push (). Editar: Pero, gran respuesta. Efectivamente lo mismo, y la mayoría de los usos ni siquiera notarán una diferencia de rendimiento, pero ayudan a conocer esos matices.
Mattygabe
67
¿Soy solo yo o la $cart[]=...sintaxis, a primera vista, parece una asignación variable y no un array_push implícito?
Brad Hein
66
Definitivamente lo hace para mí. No me importaría una explicación de por qué no es una tarea.
limeandcoconut
44
$ carrito [] = 13; es más rápido. tiene menos personajes y se ve mejor.
Gal Bracha
19
Solo ofreceré mi punto de vista alternativo de que es MUY confuso para otros programadores de idiomas leer la sintaxis de cart [] = ..., tengo experiencia con muchos idiomas y nunca adivinaría que es lo que hace.
Erti-Chris Eelmaa
75

Es mejor no usar array_pushy solo usar lo que sugirió. Las funciones solo agregan gastos generales.

//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
fuente
11
"Si está agregando múltiples valores a una matriz en un bucle, es más rápido usar array_push que repetidas [] = declaraciones" php.net/manual/en/function.array-push.php#84959
Ollie Glass
3
Absolutamente correcto si su caso de uso está agregando un solo elemento o elementos uno a la vez. Si se conocen todos los valores al mismo tiempo, probablemente sea mejor usar la notación array_push dependiendo de cuántos elementos se deben agregar; los caracteres adicionales de volver a escribir el nombre de la matriz cada vez pueden ser más un obstáculo para el rendimiento que la llamada a la función gastos generales. Como siempre, el juicio debe ejercerse al elegir. Buenas respuestas!
Mattygabe
2
Esta respuesta es la más completa.
Lokiare
10

Puedes usar array_push . Agrega los elementos al final de la matriz, como en una pila.

También podría haberlo hecho así:

$cart = array(13, "foo", $obj);
y yo
fuente
10

Según mi experiencia, su solución está bien (mejor) cuando las claves no son importantes:

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

RECUERDA, este método sobrescribe la primera matriz, ¡así que úsala solo cuando estés seguro!

$arr1 = $arr1 + $arr2;

( ver fuente )

T.Todua
fuente
1
¿Por qué el voto negativo? ¿Alguien puede explicar por qué esto es malo? ¿Es inseguro?
Sandy
44
@SandyBeach no es una respuesta
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>";
desconectarDloop
fuente
$ carrito [] = $ i; - esa parte del código agrega elementos a la matriz ----> $ cart = [$ i]; - esto pasará el compilador pero no obtendrá lo que quiere
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
fuente
-1

Cuando se desean agregar elementos con indexación de elementos basada en cero, supongo que esto también 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';
Equipo Gestix
fuente