如何在PHP中向空数组添加元素?

661

如果我在PHP中定义了一个数组,例如(我没有定义它的大小):

$cart = array();

我是否只需要使用以下方式将元素添加到它中?

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

PHP中的数组没有add方法,比如说,cart.add(13)

9个回答

1046

无论是使用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);
?>

228
正如 PHP 文档所述, 如果你每次只推送一个元素 (比如在循环中) 或只推送一个元素一次,最好使用 $cart[] = 13 的方法,不仅因为它使用的字符更少,而且不会带来函数调用的性能开销,而 array_push() 则会带来性能开销。编辑:但是,非常好的答案。实际上是相同的,大多数情况下甚至不会注意到性能差异,但知道这些微妙之处还是有帮助的。 - Mattygabe
90
是我自己不理解还是$cart[]=...这个语法看起来更像变量赋值而不是隐式的数组添加?请帮我翻译。 - Brad Hein
11
对我来说,它确实是一个指定任务。我不介意为什么它不是一个指定任务的解释。 - limeandcoconut
4
$cart[] = 13; 更快,更简洁,更美观。 - Gal Bracha
35
我将提供我的另一种观点,即使用cart[] = ...的语法非常令其他语言程序员感到困惑。我有很多语言的经验,但我从未猜到它的作用。 - Erti-Chris Eelmaa
显示剩余8条评论

106
最好不要使用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';

13
如果你在循环中向数组添加多个值,使用array_push比重复的[] =语句更快。 - Ollie Glass
3
如果您的使用场景是添加单个项目或逐个添加项目,则完全正确。如果所有值同时已知,则最好只使用array_push表示法,具体取决于需要添加多少项,每次重新输入数组名称所需的额外字符可能会成为性能障碍,而函数调用开销则较小。像往常一样,在选择时应行使判断力。好答案! - Mattygabe
2
这个答案是最完整的。 - Lokiare
  1. array_push()有一个返回值,而其他方法没有。也许这是它的开销较大的原因之一?除非你需要那个返回值,否则似乎达成了使用其他方法的共识。
  2. 如果你需要将元素添加到数组的末尾,请使用array_push()或连接的+=方法(本答案未显示),或者$cart[] = 13方法。使用命名/数字键方法($cart[4] = $object$cart['key'] = 'test'方法)不能保证元素将被添加到数组的末尾,只能保证它将在数组中。
- SherylHohman
@SherylHohman:这个 $cart[] = 会将值添加到数组的末尾。 - OIS

20

根据我的经验,在关键字不重要时,解决方案还不错(最好):

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

11
你可以使用array_push。它将元素添加到数组的末尾,就像堆栈一样。
你也可以这样做:
$cart = array(13, "foo", $obj);

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

4

请记住,这个方法会覆盖第一个数组,请仅在您确定时使用!

$arr1 = $arr1 + $arr2;

(查看源代码)


1
为什么会有人踩这个帖子,有人能解释一下这是为什么吗?它不安全吗? - Sandy
6
@SandyBeach 这不是一个回答。 - mateos

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

0

如果你想要追加一个关联数组

//append to array   
$countries["continent"] = "Europe";

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接