久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      PHP數(shù)組合并方法:array_merge VS array_push VS 元素追加

      本篇文章給大家分享三種PHP數(shù)組合并方法:array_merge、array_push和元素追加法,并比較一下它們的性能和內(nèi)存消耗。

      PHP數(shù)組合并方法:array_merge VS array_push VS 元素追加

      在 PHP 中實現(xiàn)數(shù)組的合并,常用的方法有兩種:

      • 直接使用 array_merge ,這種方法雖然做到了代碼的簡潔,但卻大大增加了內(nèi)存的開銷,同時拖慢了 PHP 的性能。
      • 對數(shù)組進(jìn)行遍歷,將數(shù)組中的值逐個追加到結(jié)果數(shù)組中,相較直接使用 array_merge ,這種方法雖然增加了代碼量,卻降低了 PHP 的內(nèi)存開銷,同時提升了性能。

      ⒈ 代碼實現(xiàn)

      /**     用 PHP 實現(xiàn)將一個二維數(shù)組合并為一個一維數(shù)組 */ // 數(shù)組的長度 $len = $argv[1];  $start = 0; $arr = []; // 數(shù)組初始化 while ($start < $len) {     $arr[$start] = range(1, $len);     $start ++; } // 采用 array_merge 的方式合并數(shù)組 function merge1 (array $input) {     $results = [];      foreach ($input as $item) {         $results = array_merge($results, $item);     }      return $results; } // 采用 array_push 的方式合并數(shù)組 function merge2 (array $input)  {     $results = [];      foreach ($input as $item) {         foreach ($item as $v) {             array_push($results, $v);         }     }      return $results; } // 采用元素追加的方式合并數(shù)組 function merge3(array $input) {     $results = [];      foreach ($input as $item) {         foreach ($item as $v) {             $results [] = $v;         }     }      return $results; }  echo microtime(), PHP_EOL; $res = merge3($arr); echo microtime(), PHP_EOL;  echo memory_get_usage(), PHP_EOL; echo memory_get_peak_usage(), PHP_EOL;

      ⒉ 運行結(jié)果比較

      數(shù)組長度 array_merge array_push 元素追加
      內(nèi)存消耗(B) 運行時間(?) 內(nèi)存消耗(B) 運行時間(?) 內(nèi)存消耗(B) 運行時間(?)
      5 432,440 20 433,200 25 433,200 19
      50 764,704 322 629,736 141 629,736 102
      500 27,434,944 897,422 19,042,416 11,294 19,042,416 8,182
      5,000 3,479,599,136 904,476,129 2,405,853,392 1,266,203 2,405,853,392 1,022,328

      ⒊ 原因分析

      • 使用 array_merge ,每調(diào)用一次,都需要為 array_merge 的結(jié)果數(shù)組分配新的內(nèi)存空間(PHP 采用的是寫時復(fù)制的機(jī)制,而 array_merge 不會對參數(shù)進(jìn)行寫操作,所以每次調(diào)用時并不需要為入?yún)⒅匦路峙鋬?nèi)存)。隨著數(shù)組長度的增加,調(diào)用 array_merge 的次數(shù)也會增加,重新分配內(nèi)存的次數(shù)也會增加,同時結(jié)果數(shù)組的長度不斷增加,每次所需要分配的內(nèi)存空間也會隨著增加,這就需要消耗大量的內(nèi)存。同時,頻繁的分配/銷毀內(nèi)存,導(dǎo)致 PHP 的性能下降。

      • 使用 array_push ,只需要對結(jié)果數(shù)組分配一次內(nèi)存,之后會一直往結(jié)果數(shù)組中追加元素。PHP 數(shù)組的底層實現(xiàn)方式為 hashtable,并且在初始化時會為 hashtable 分配 8 個長度的 bucket,每個 bucket 存儲一個數(shù)組元素。當(dāng)現(xiàn)有的 bucket 用完之后,如果還要繼續(xù)往數(shù)組中追加元素,那么 PHP 會將現(xiàn)有的 bucket 數(shù)量翻倍,所以,使用 array_push 往結(jié)果數(shù)組中追加元素時,并不是每次操作都需要分配新的 bucket,這樣就減少了分配內(nèi)存的次數(shù),同時加快了程序運行時間,提升了 PHP 性能。

      • 使用元素追加的方式,原理與 array_push 類似,唯一的區(qū)別在于使用 array_push 會有函數(shù)調(diào)用,而元素追加的方式不需要函數(shù)調(diào)用,這樣程序運行會更輕量。

      推薦學(xué)習(xí):《PHP視頻教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號