Как добавить элементы в пустой массив в PHP?

488

Если я определю массив в PHP, например (я не определяю его размер):

$cart = array();

Я просто добавляю элементы к нему, используя следующее?

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

Разве у массивов в PHP нет метода add, например cart.add(13)?

AquinasTub
источник

Ответы:

802

И array_pushописанный вами метод будет работать.

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

Такой же как:

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

// Or 
$cart = array();
array_push($cart, 13, 14);
?>
Барт С.
источник
179
Как указано в документации PHP, если вы нажимаете только один элемент каждый раз (как в цикле) или один элемент один раз, лучше использовать $cart[] = 13метод не только потому, что для выполнения одной и той же операции требуется меньше символов, но также не накладывает накладных расходов на производительность при вызове функции, как это делает array_push (). Редактировать: Но отличный ответ. Фактически то же самое, и большинство пользователей даже не заметят разницы в производительности, но помогут узнать эти нюансы.
Mattygabe
67
Это только у меня или $cart[]=...синтаксис, на первый взгляд, выглядит как присваивание переменной, а не как неявный array_push?
Брэд Хейн
6
Это определенно для меня. Я не против объяснения, почему это не задание.
limeandcoconut
4
$ cart [] = 13; быстрее. имеет меньше символов и выглядит лучше.
Гал Браха
19
Я просто предложу свою альтернативную точку зрения, что другим программистам ОЧЕНЬ смущает чтение синтаксиса cart [] = ..., у меня есть опыт работы со многими языками, и я никогда не догадываюсь, что это именно так.
Эрти-Крис Элмаа
75

Лучше не использовать, array_pushа просто использовать то, что вы предложили. Функции просто добавляют накладные расходы.

//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
источник
11
«Если вы добавляете несколько значений в массив в цикле, использовать array_push быстрее, чем повторяющиеся [] = инструкции» php.net/manual/en/function.array-push.php#84959
Ollie Glass
3
Абсолютно правильно, если ваш сценарий использования добавляет один элемент или элементы по одному. Если все значения известны одновременно, то, вероятно, лучше всего использовать нотацию array_push в зависимости от того, сколько элементов необходимо добавить, дополнительные символы от повторного ввода имени массива каждый раз могут быть больше помехой производительности, чем вызовом функции. над головкой. Как всегда, суждение должно осуществляться при выборе. Хорошие ответы!
Mattygabe
2
Этот ответ является наиболее полным.
Локиаре
10

Вы можете использовать array_push . Он добавляет элементы в конец массива, как в стеке.

Вы могли бы также сделать это так:

$cart = array(13, "foo", $obj);
и я
источник
10

Исходя из моего опыта, вы можете решить, что ключи хороши, когда ключи не важны:

$cart = [];
$cart[] = 13;
$cart[] = "foo";
$cart[] = obj;
fico7489
источник
2

ПОМНИТЕ, этот метод перезаписывает первый массив, поэтому используйте его только тогда, когда вы уверены!

$arr1 = $arr1 + $arr2;

( см. источник )

T.Todua
источник
1
Почему отрицание, кто-то может объяснить, почему это плохо? это небезопасно?
Сэнди
4
@ SandyBeach это не ответ
Матеос
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
источник
$ cart [] = $ i; - эта часть кода добавляет элементы в массив ----> $ cart = [$ i]; - это пройдет компилятор, но вы не получите то, что вы хотите
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

Когда кто-то хочет, чтобы элементы были добавлены с индексацией элементов, начинающейся с нуля, я думаю, это также сработает:

// 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';
Gestix Team
источник