中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP數組合并方法有哪些

發布時間:2021-07-08 10:04:31 來源:億速云 閱讀:142 作者:小新 欄目:編程語言

這篇文章主要介紹PHP數組合并方法有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

給大家分享三種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_mergearray_push元素追加
內存消耗(B)運行時間(?)內存消耗(B)運行時間(?)內存消耗(B)運行時間(?)
5432,44020433,20025433,20019
50764,704322629,736141629,736102
50027,434,944897,42219,042,41611,29419,042,4168,182
5,0003,479,599,136904,476,1292,405,853,3921,266,2032,405,853,3921,022,328

⒊ 原因分析

  • 使用 array_merge ,每調用一次,都需要為 array_merge 的結果數組分配新的內存空間(PHP 采用的是寫時復制的機制,而 array_merge 不會對參數進行寫操作,所以每次調用時并不需要為入參重新分配內存)。隨著數組長度的增加,調用 array_merge 的次數也會增加,重新分配內存的次數也會增加,同時結果數組的長度不斷增加,每次所需要分配的內存空間也會隨著增加,這就需要消耗大量的內存。同時,頻繁的分配/銷毀內存,導致 PHP 的性能下降。

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

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

以上是“PHP數組合并方法有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

双流县| 鹤山市| 奉节县| 文成县| 汾西县| 辽宁省| 双城市| 延长县| 烟台市| 唐山市| 宁陕县| 天台县| 清新县| 夏河县| 四川省| 青神县| 精河县| 屯门区| 祁门县| 隆安县| 兴宁市| 大渡口区| 岗巴县| 刚察县| 故城县| 定南县| 禹州市| 光山县| 武平县| 聊城市| 嫩江县| 牡丹江市| 胶州市| 宁都县| 繁峙县| 喀喇沁旗| 利辛县| 临夏县| 蓬安县| 泰安市| 丹东市|