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


488

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

$cart = array();

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

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

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

Ответы:


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

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;

2

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

$arr1 = $arr1 + $arr2;

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


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

$ 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';
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.