Rumah pembangunan bahagian belakang tutorial php PHP数组合并方法:array_merge VS array_push VS 元素追加

PHP数组合并方法:array_merge VS array_push VS 元素追加

Jul 07, 2021 pm 07:13 PM
array_merge array_push php Cantuman tatasusunan

本篇文章给大家分享三种PHP数组合并方法:array_merge、array_push和元素追加法,并比较一下它们的性能和内存消耗。

PHP数组合并方法:array_merge VS array_push VS 元素追加

在 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;
Salin selepas log masuk

⒉ 运行结果比较

数组长度 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
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 ,每调用一次,都需要为 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视频教程

Atas ialah kandungan terperinci PHP数组合并方法:array_merge VS array_push VS 元素追加. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

CakePHP Bekerja dengan Pangkalan Data CakePHP Bekerja dengan Pangkalan Data Sep 10, 2024 pm 05:25 PM

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Pembalakan CakePHP Pembalakan CakePHP Sep 10, 2024 pm 05:26 PM

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

See all articles