Array_push()和 $array [] = 之间的区别

在 PHP 手册中,(Array _ push)说. 。

如果使用 Array _ push ()向数组中添加一个元素,最好是 使用 $array [] = ,因为这样就不会产生调用 功能。

例如:

$arr = array();
array_push($arr, "stackoverflow");
print_r($arr);

$arr[] = "stackoverflow";
print_r($arr);

我不明白为什么会有这么大的区别。

171758 次浏览

You should always use $array[] if possible because as the box states there is no overhead for the function call. Thus it is a bit faster than the function call.

当您在 PHP 中调用函数(例如 array_push())时,会有调用的开销,因为 PHP 必须查找函数引用,找到它在内存中的位置并执行它定义的任何代码。

使用 $arr[] = 'some value';不需要函数调用,直接在数据结构中实现加法。因此,在添加大量数据时,使用 $arr[]要快得多,资源效率也高得多。

不同之处在于下面的一行“因为这样就不会有调用函数的开销”

如果第一个参数不是,则 array_push()将引发警告 这不同于 $var[]行为,在 $var[]行为中,一个新的数组是 被创造出来。

Array _ Push ーー将一个或多个元素推到数组的末尾

请注意“ 末端的一个或多个元素”这几个字 要使用 $arr[]做到这一点,你必须得到数组的最大大小

您可以使用 array _ push 在一个镜头中向数组添加多个元素,

例如 array_push($array_name, $element1, $element2,...)

其中 $element1,$element2,... 是要添加到数组中的元素。

但是如果一次只想添加一个元素,那么应该首选其他方法(即使用 $array _ name [])。

explain: 1. 第一个在数组中声明变量。

2. 第二个 array _ push 方法用于推送数组变量中的字符串。

3. 最后打印结果。

第二种方法是直接将字符串存储在数组中。

5. 使用 print _ r 方法将数据打印到数组值中。

这两个是一样的

我知道这是一个古老的答案,但它可能有助于其他人知道,两者之间的另一个区别是,如果你必须添加超过2/3的值每个循环到一个数组,它更快地使用:

     for($i = 0; $i < 10; $i++){
array_push($arr, $i, $i*2, $i*3, $i*4, ...)
}

而不是:

     for($i = 0; $i < 10; $i++){
$arr[] = $i;
$arr[] = $i*2;
$arr[] = $i*3;
$arr[] = $i*4;
...
}

Edit-忘记关闭 for条件的括号

两者是相同的,但是 array _ push 在它的参数中创建一个循环,该参数是一个数组并执行 $array [] = $element

没有人说过,但 ARRAY _ push 只是将一个元素推送到 END OF THE ARRAY,在这里 $ARRAY [ index ]可以在任何给定的索引处插入一个值。区别大了。

我想我应该加入讨论,因为我相信在使用索引数组时,这两者之间存在着重要的区别,人们应该注意到这一点。 假设你正在通过循环访问一些数据集来动态地创建一个多维关联数组。

$foo = []
foreach ($fooData as $fooKey => $fooValue) {
foreach ($fooValue ?? [] as $barKey => $barValue) {


// Approach 1: results in Error 500
array_push($foo[$fooKey], $barKey); // Error 500: Argument #1 ($array) must be of type array
// NOTE: ($foo[$fooKey] ?? []) argument won't work since only variables can be passed by reference


// Approach 2: fix problem by instantiating array beforehand if it didn't exist
$foo[$fooKey] ??= [];
array_push($foo[$fooKey], $barKey);


// Approach 3: One liner approach
$foo[$fooKey][] = $barKey; // Instantiates array if it doesn't exist
}
}

如果事先没有将 $foo[$fooKey]实例化为一个数组,那么我们就无法在没有获得 Error 500的情况下执行 array_push。简写 $foo[$fooKey][]为我们完成了繁重的工作,它检查提供的元素是否是数组,如果不是,它将创建它并为我们推送项。