ChatGPT解决这个技术问题 Extra ChatGPT

How to add elements to an empty array in PHP?

If I define an array in PHP such as (I don't define its size):

$cart = array();

Do I simply add elements to it using the following?

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

Don't arrays in PHP have an add method, for example, cart.add(13)?


Y
Yoram de Langen

Both array_push and the method you described will work.

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

Is the same as:

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

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

As stated in the PHP documentation, if you're only pushing a single element every time (like in a loop) or a single element once, it's best to use the $cart[] = 13 method not only because it's less characters to do the same operation, but it also doesn't impose the performance overhead of a function call, which array_push() would. Edit: But, great answer. Effectively the same, and majority of uses won't even notice a performance difference, but helps to know those nuances.
Is it just me or does the $cart[]=... syntax, at first glance, look like a variable assignment and not an implicit array_push?
It definitely does to me. I wouldn't mind an explanation of why its not an assignment.
$cart[] = 13; is faster. has less characters and looks better.
I'll just offer my alternative viewpoint that it's VERY confusing for other language programmers to read the syntax of cart[] =..., I've got experience with a lot of languages and I'd never guess that's what it does.
k
kamal pal

It's better to not use array_push and just use what you suggested. The functions just add overhead.

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

"If you're adding multiple values to an array in a loop, it's faster to use array_push than repeated [] = statements" php.net/manual/en/function.array-push.php#84959
Absolutely correct if your use-case is adding a single item or items one at a time. If all values are known at the same time, it's probably best just to use the array_push notation depending on how many items must be added the extra characters from re-typing the array name each time may be more of a performance hindrance than the function call over-head. As always, judgment should be exercised when choosing. Good answers!
This answer is the most complete.
1) array_push() has a return value, whereas the others do not. Perhaps this is the/one reason for its overhead? It seems to be a consensus to use the other methods, unless you need that return value. 2) If you need elements to be added to the end of the array, use either array_push() or += method of concatenation (not shown in this answer), or $cart[] = 13 methods. Using the named/numeric key method ($cart[4] = $object and $cart['key'] = 'test'` methods do not guarantee the element will be added to the end of the array, only that it will be in the array.
@SherylHohman: This $cart[] = will add values to the end of the array.
f
fico7489

Based on my experience, solution which is fine(the best) when keys are not important:

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

a
andi

You can use array_push. It adds the elements to the end of the array, like in a stack.

You could have also done it like this:

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

u
unpluggeDloop
$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; - that part of code add elements to array ----> $cart = [$i]; - this will pass compiler but you will not get what you want
C
Community

REMEMBER, this method overwrites first array, so use only when you are sure!

$arr1 = $arr1 + $arr2;

(see source)


Why the downvote, can someone explain why this is bad? is it insecure?
@SandyBeach it's not an answer
I
Isuru Eshan
$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>";
}

G
Gestix Team

When one wants elements to be added with zero-based element indexing, I guess this will work as well:

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