PHP數組合併方法:array_merge VS array_push VS 元素追加
本篇文章跟大家分享三種PHP數組合併方法:array_merge、array_push和元素追加法,並比較一下它們的效能和記憶體消耗。
在PHP 中實作陣列的合併,常用的方法有兩種:
- 直接使用array_merge ,這種方法雖然做到了程式碼的簡潔,但卻大大增加了記憶體的開銷,同時拖慢了PHP 的效能。
- 對數組進行遍歷,將數組中的值逐個追加到結果數組中,相較直接使用array_merge ,這種方法雖然增加了代碼量,卻降低了PHP 的內存開銷,同時提升了性能。
⒈ 程式碼實作
/** 用 PHP 实现将一个二维数组合并为一个一维数组 */ // 数组的长度 $len = $argv[1]; $start = 0; $arr = []; // 数组初始化 while ($start < $len) { $arr[$start] = range(1, $len); $start ++; } // 采用 array_merge 的方式合并数组 function merge1 (array $input) { $results = []; foreach ($input as $item) { $results = array_merge($results, $item); } return $results; } // 采用 array_push 的方式合并数组 function merge2 (array $input) { $results = []; foreach ($input as $item) { foreach ($item as $v) { array_push($results, $v); } } return $results; } // 采用元素追加的方式合并数组 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;
⒉ 運行結果比較
#陣列長度 | array_merge | #array_push | ||||
記憶體消耗(B) | 運行時間(㎲) | 記憶體消耗(B) | #運行時間(㎲) | 記憶體消耗(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 |
3,479,599,5,000
3,479,599,- 5,000
2,405,853,3923,479,599,
7691922#192#1919,136##。
2,405,853,392
1,266,203
- 1,022,328
array_merge⒊原因分析
使用
array_merge
,每呼叫一次,都需要為array_merge
的結果數組分配新的內存空間(PHP 採用的是寫入時複製的機制,而array_merge
不會對參數進行寫入操作,所以每次呼叫時並不需要為入參重新分配記憶體)。隨著陣列長度的增加,呼叫 的次數也會增加,重新分配記憶體的次數也會增加,同時結果陣列的長度不斷增加,每次所需分配的記憶體空間也會隨著增加,這就需要消耗大量的記憶體。同時,頻繁的分配/銷毀內存,導致 PHP 的效能下降。 -
hashtable使用
array_push
,只需要對結果數組分配一次內存,之後會一直往結果數組中追加元素。 PHP 陣列的底層實作方式為 ,並且在初始化時會為
指派8 個長度的bucket,每個
bucket###儲存一個數組元素。當現有的###bucket### 用完之後,如果還要繼續往數組中追加元素,那麼PHP 會將現有的###bucket### 數量翻倍,所以,使用###array_push ### 往結果陣列中追加元素時,並不是每次操作都需要分配新的###bucket###,這樣就減少了分配記憶體的次數,同時加快了程式運行時間,提升了PHP 效能。 ############使用元素追加的方式,原理與###array_push### 類似,唯一的區別在於使用###array_push### 會有函數調用,而元素追加的方式不需要函數調用,這樣程式運行會更輕。 ############推薦學習:《###PHP影片教學###》###以上是PHP數組合併方法:array_merge VS array_push VS 元素追加的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

CakePHP 是 PHP 的開源框架。它旨在使應用程式的開發、部署和維護變得更加容易。 CakePHP 基於類似 MVC 的架構,功能強大且易於掌握。模型、視圖和控制器 gu

登入 CakePHP 是一項非常簡單的任務。您只需使用一項功能即可。您可以記錄任何後台程序(如 cronjob)的錯誤、異常、使用者活動、使用者採取的操作。在 CakePHP 中記錄資料很容易。提供了 log() 函數
