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

新手上路,请多包涵

在 PHP 手册中,( array_push )说..

如果您使用 array_push() 向数组添加一个元素,最好使用 $array[] = 因为这样就没有调用函数的开销。

例如 :

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

对比

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

我不明白为什么会有很大的不同。

原文由 l2aelba 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 510
2 个回答

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

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

原文由 BenM 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 $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] 事先实例化为数组,我们将无法做到 array_push 没有得到 Error 500 。速记 $foo[$fooKey][] 为我们做了繁重的工作,检查提供的元素是否是一个数组,如果不是,它会创建它并为我们推送项目。

原文由 Nikola 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题