Як додати елементи до порожнього масиву в PHP?


488

Якщо я визначаю масив у PHP, наприклад (я не визначаю його розмір):

$cart = array();

Я просто додаю до нього елементи, використовуючи наступне?

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

Наприклад, у масивах PHP немає методу додавання 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);
?>

178
Як зазначено в документації на PHP, якщо ви лише один раз натискаєте на один елемент (наприклад, у циклі) або один елемент, найкраще використовувати $cart[] = 13метод не лише тому, що менше символів виконує ту саму операцію, але це також не накладає накладні витрати на виклик функції, який би array_push (). Правка: Але, чудова відповідь. Ефективно те саме, і більшість застосувань навіть не помічають різниці в продуктивності, але допомагає знати ці нюанси.
Mattygabe

67
Це лише я чи $cart[]=...синтаксис, на перший погляд, виглядає як змінне призначення, а не неявний array_push?
Бред Хайн

6
Це, безумовно, робить для мене. Я не заперечував би поясненням, чому це не призначення.
limeandcoconut

4
$ cart [] = 13; швидше. має менше символів і виглядає краще.
Гал Брача

19
Я просто запропоную свою альтернативну точку зору, що ДУЖЕ заплутано для інших програмістів мови читати синтаксис кошика [] = ..., у мене є досвід роботи з багатьма мовами, і я ніколи не здогадуюсь, що це робить.
Ерті-Кріс Еельмаа

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 залежно від того, скільки елементів потрібно додати зайвих символів для повторного введення імені масиву кожного разу, можливо, це буде більше перешкодою для продуктивності, ніж викликом функції над головою. Як завжди, при виборі слід застосовувати судження. Гарні відповіді!
Маттігабе

2
Ця відповідь є найбільш повною.
Локіаре

10

Ви можете використовувати array_push . Він додає елементи до кінця масиву, як у стеку.

Ви могли також зробити це так:

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

10

Виходячи з мого досвіду, ви вирішите добре (найкраще), коли ключі не важливі:

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

2

ПАМ’ЯТАЙТЕ, цей метод замінює перший масив, тому використовуйте лише тоді, коли ви впевнені!

$arr1 = $arr1 + $arr2;

( див. джерело )


1
Чому голос, може хтось пояснити, чому це погано? це небезпечно?
Сенді

4
@SandyBeach це не відповідь
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>";

$ 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.