【问题标题】:Difference between array_push() and $array[] =array_push() 和 $array[] 之间的区别 =
【发布时间】:2012-12-23 08:31:54
【问题描述】:

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

如果您使用 array_push() 将一个元素添加到数组中,最好 使用 $array[] = 因为这样就没有调用 功能。

例如:

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

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

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

【问题讨论】:

  • 一个是函数调用,另一个不是。正是框中提到的内容。
  • 一个是上面提到的函数调用,这意味着使用一些资源来切换控制到/从函数调用(从而导致开销处理)。然而,稍后只是直接将新元素分配到数组中。
  • 这个问题为我节省了很多时间推送到数组:)

标签: php arrays push


【解决方案1】:

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

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

【讨论】:

  • 如果这样的符号 "$arr[] = 'some value';"归结为函数调用?
  • @gekannt 那会怎样?你的意思是如果你的评论中的“一些价值”是一个关闭?这会将闭包的引用存储到数组中。如果您的意思是“某个值”是一个被调用的函数,那么它将添加该函数返回的任何内容。
  • @Kevin:我同意你的观点,我很确定替代语法背后有一个函数,它不是上面提到的函数,因为我在 php 文档中看到了下面的评论:“如果你使用 array_push() 将一个元素添加到数组中,最好使用 $array[] = 因为这样就没有调用函数的开销。”现在没有时间确切地查看其背后的确切内容,因为搜索词对搜索引擎来说有点混乱:)
  • 是否有任何实际证据表明$arr[] = value 更快?试图想象为什么编译器会以不同的方式处理代码。
  • @c.. - 可能编译器的不同是因为array_push 允许推送多个值,这更容易实现为函数。
【解决方案2】:

您可以使用 array_push 一次将多个元素添加到数组中,

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

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

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

【讨论】:

  • 在整个项目中根据需要将两者结合起来是不好的做法吗?
  • @testing123 绝对不是。最好使用手头上最有效的解决方案,除非它严重影响可读性、兼容性等(或者如果您需要遵守某些样式指南)。
  • 结合参数解包使array_push($arr1, ...$arr2)成为可能。在组合多个数组的情况下,它可以比$arr1 = array_merge(arr1, $arr2) 快几个数量级。
【解决方案3】:

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

array_push() 如果第一个参数不是 数组。这与 $var[] 行为不同,其中新数组是 已创建。

【讨论】:

  • 我没有说这是一个原因。在问题中,提出了差异,这也是差异
  • 观察力好;因此,这是对讨论的贡献。根据标题,有人可能会在谷歌上搜索到此问答。 (尽管严格来说,这不是 OP 想知道的。他们询问的是他们引用的句子,而不是两者之间的其他差异。)
【解决方案4】:

如果可能,您应该始终使用$array[],因为正如方框中所述,函数调用没有开销。因此它比函数调用要快一些。

【讨论】:

    【解决方案5】:

    array_push — 将一个或多个元素压入数组末尾

    记下“一个或多个元素到末尾”这句话 要使用 $arr[] 做到这一点,您必须获得数组的最大大小

    【讨论】:

    • Re "要使用 $arr[] 来做到这一点,您必须获得数组的最大大小"。不,您将$arr[...index...] = $value; 与此处讨论的内容($arr[] = $value;)混淆了。不需要知道大小或数组,推到底。多个元素只是多个调用:$arr[] = $value1; $arr[] = $value2; $arr[] = $value3;
    【解决方案6】:

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

    2.第二个array_push方法用于将字符串压入数组变量中。

    3.最后它会打印结果。

    4.第二种方法是直接将字符串存入数组。

    5.使用print_r方法将数据打印在数组值中。

    这两个是一样的

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        【解决方案8】:

        我知道这是一个旧答案,但它可能有助于其他人知道两者之间的另一个区别是,如果您必须在每个循环中向数组添加超过 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_merge 相比如何。例如。 for(...){ $arr = $arr + [$i, $i*2, $i*3, $i*4, ...] }。我推测 array_push 仍然比那快一些。
        【解决方案9】:

        没有人说,但是 array_push 只是将一个元素推送到数组的末尾,其中 $array[index] 可以在任何给定的索引处插入一个值。大不同。

        【讨论】:

        • 问题是“array_push() 和 $array[] 之间的区别 =” 我所说的是一个区别。一个大的!
        • 我不同意。您正在描述$array[index] = ,这是与$array[] = ... 相比不同的操作。该问题给出了两段代码,并询问为什么它们之间会有显着的[性能]差异。这个问题的字面意思是$array[] = ...,这是一个特定的php习语,不涉及索引。数组 + 索引解决不同的问题,产生不同的代码,并且是不同的权衡。
        猜你喜欢
        • 2018-08-30
        • 2012-05-21
        • 2019-01-28
        • 2016-05-12
        • 2021-06-10
        • 2016-05-03
        • 1970-01-01
        • 2011-06-15
        相关资源
        最近更新 更多