簡體   English   中英

在PHP中,我們如何返回一個大型數組?

[英]In PHP, how do we return a large array?

如果這是代碼,請說:

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

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

返回像這樣的大型數組是否效率低,因為它是“按值返回”? (如果它不是1000而是1000000)。 所以為了改進它,我們是否會將第一行更改為:

function &bar() {

也就是說,只需在函數名前添加一個& - 如果返回一個大數組,這是正確的首選方法嗎?

關於PHP如何處理變量存儲存在很多誤解。 由於PHP是“寫入時復制”,因此無需創建“引用”(實際上是符號表別名)以節省空間或時間。 事實上,這樣做會傷害你。 如果要將其用作某些內容的別名, 則只應在PHP中創建引用。 我運行了兩個片段,看起來第二個實際上使用了更多的內存(雖然不是很多)。

順便說一下,1000個整數的數組很小

由於COW ,它們消耗的內存量絕對相同

  1. http://ideone.com/bZgm7
  2. http://ideone.com/e3Jfr

PS:要通過引用傳遞“true”,您還需要在賦值中添加它:

$ha =& bar();

如果在函數和外部memory_get_peak_usage() ,您將看到返回數組不會增加內存。

寫的PHP副本。 在這種情況下,即使您執行寫操作也無需復制,因為原始變量超出了范圍。 所以不,沒有理由這樣做。

事實上,在PHP中,除非您需要它們提供的功能 ,否則通常沒有理由使用引用:更改原始變量。

官方手冊頁說:如果要使用函數來查找引用應綁定到哪個變量,則按引用返回很有用。 不要使用按引用返回來提高性能。 引擎將自動對其進行自動優化。 只有在有正當技術理由的情況下才返回引用

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

所以,在你的情況下,不要使用它。

那這個呢?

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM