在PHP中,我们如何返回一个大型数组?

时间:2012-05-02 00:09:21

标签: php

说这是代码:

function bar() {
    $result = array();
    for ($i = 0; $i < 1000; $i++) {
        $result[] = $i * 10;
    }
    return $result;
}

$ha = bar();
print_r($ha);

返回像这样的大型数组是否效率低,因为它是“按值返回”? (如果它不是1000而是1000000)。因此,要改进它,我们是否会将第一行更改为:

function &bar() {

也就是说,只需在函数名前加一个& - 如果返回一个大数组,这是正确的首选方法吗?

5 个答案:

答案 0 :(得分:7)

关于PHP如何处理变量存储存在很多误解。由于PHP是“写入时复制”,因此无需创建“引用”(实际上是符号表别名)以节省空间或时间。事实上,这样做会伤害你。如果要将其用作某个别名的别名,则应该在PHP中创建引用。我运行了两个片段,看起来第二个实际上使用了更多内存(虽然不是很多)。

顺便说一下,1000个整数的数组很小

答案 1 :(得分:5)

由于COW

,他们消耗绝对相同的内存量
  1. http://ideone.com/bZgm7
  2. http://ideone.com/e3Jfr
  3. PS:要通过引用传递“true”,您还需要在赋值中添加它:

    $ha =& bar();
    

答案 2 :(得分:3)

如果你在函数和外部输入memory_get_peak_usage(),你会发现返回数组不会增加内存。

写入时的PHP副本。在这种情况下,即使您执行写操作也无需复制,因为原始变量超出了范围。所以不,没有理由这样做。

事实上,在PHP中,除非你需要它们提供的功能,否则通常没有理由使用引用:改变原始变量。

答案 3 :(得分:1)

官方手册页说:如果要使用函数查找引用应绑定到哪个变量,则按引用返回非常有用。不要使用按引用返回来提高性能。引擎将自动对其进行自动优化。只有在有正当技术理由的情况下才能返回引用

http://it2.php.net/manual/en/language.references.return.php

因此,在您的情况下,请不要使用它。

答案 4 :(得分:0)

这个怎么样?

function bar($result) {
    $result = array();
    for ($i = 0; $i < 1000; $i++) {
        $result[] = $i * 10;
    }
}

bar(&$ha);
print_r($ha);