cari
Rumahpembangunan bahagian belakangtutorial php浅谈PHP源码二十二:关于array_splice函数

这篇文章主要介绍了关于  浅谈PHP源码二十二:关于array_splice函数,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

浅谈PHP源码二十二:关于array_splice函数
array_splice
(PHP 4, PHP 5)

array_splice — 把数组中的一部分去掉并用其它值取代
说明
array array_splice ( array &input, int offset [, int length [, array replacement]] )

array_splice() 把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用 replacement 数组中的单元取代。返回一个包含有被移除单元的数组。注意 input 中的数字键名不被保留。

如果 offset 为正,则从 input 数组中该值指定的偏移量开始移除。如果 offset 为负,则从 input 末尾倒数该值指定的偏移量开始移除。

如果省略 length,则移除数组中从 offset 到结尾的所有部分。如果指定了 length 并且为正值,则移除这么多单元。如果指定了 length 并且为负值,则移除从 offset 到数组末尾倒数 length 为止中间所有的单元。小窍门:当给出了 replacement 时要移除从 offset 到数组末尾所有单元时,用 count($input) 作为 length。

如果给出了 replacement 数组,则被移除的单元被此数组中的单元替代。如果 offset 和 length 的组合结果是不会移除任何值,则 replacement 数组中的单元将被插入到 offset 指定的位置。注意替换数组中的键名不保留。如果用来替换的值只是一个单元,那么不需要给它加上 array(),除非该单元本身就是一个数组

array_splice函数调用的是php_splice函数,对于此函数的主要代码说明如下:

 /* 创建并初始化返回数组,此返回数组为php_splice的返回数组,并非array_splice的返回数组(array_splice的返回数组为removed)*/ALLOC_HASHTABLE(out_hash);    zend_hash_init(out_hash, 0, NULL, ZVAL_PTR_DTOR, 0);/*将数组中从开始到offset的元素拷贝到返回数组中 */for (pos=0, p=in_hash->pListHead; pos<offset && p ; pos++, p=p->pListNext) { 
    entry = *((zval **)p->pData);
    entry->refcount++;/*更新返回数组 */if (p->nKeyLength)
    zend_hash_quick_update(out_hash, p->arKey, p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);else
    zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);}/* 将需要移除的元素赋值给removed,即array_splice的返回数组 */if (removed != NULL) {
    for ( ; pos<offset+length && p; pos++, p=p->pListNext) {
    entry = *((zval **)p->pData);
    entry->refcount++;
    if (p->nKeyLength)
        zend_hash_quick_update(*removed, p->arKey, p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);
    else
        zend_hash_next_index_insert(*removed, &entry, sizeof(zval *), NULL);
    }} else /* 其它情况,跳过这些元素 */
    for ( ; pos<offset+length && p; pos++, p=p->pListNext);/* 如果有元素需要插入,即有replacement参数 */if (list != NULL) {/* 对于每个元素,创建新的zval,拷贝并将它写入到返回数组中*/
    for (i=0; i<list_count; i++) {
        entry = *list[i];
        entry->refcount++;
        zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);
    }}/* 拷贝剩下的元素 */for ( ; p ; p=p->pListNext) {
    entry = *((zval **)p->pData);
    entry->refcount++;
    if (p->nKeyLength)
        zend_hash_quick_update(out_hash, p->arKey, p->nKeyLength, p->h, &entry, sizeof(zval *), NULL);
    else
        zend_hash_next_index_insert(out_hash, &entry, sizeof(zval *), NULL);} /* 重置数组的游标,相当于reset函数*/zend_hash_internal_pointer_reset(out_hash);

整个过程:
1、拷贝从开始到offset的元素到返回数组
2、移除从offset开始到offset+length的元素
3、如果有替换的元素,将新元素插入到offset后面的位置
4、将offset+length后面的函数插入到返回数组后面
5、重置数组游标

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

浅谈PHP源码二十一:关于array_slice函数

浅谈PHP源码二十:关于array_flip,array_reverse函数

Atas ialah kandungan terperinci 浅谈PHP源码二十二:关于array_splice函数. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
E-mel PHP: Panduan Penghantaran Langkah demi LangkahE-mel PHP: Panduan Penghantaran Langkah demi LangkahMay 09, 2025 am 12:14 AM

PhpisusedforsendingemailsduetoitsintegrationWithservermailservicesandexternalsmtpproviders, automatingnotificationsandmarketingcampaigns.1) Setupyourphpenvironmentwithawebserverandphp, Memastikan

Cara Menghantar E -mel melalui PHP: Contoh & KodCara Menghantar E -mel melalui PHP: Contoh & KodMay 09, 2025 am 12:13 AM

Cara terbaik untuk menghantar e -mel ialah menggunakan perpustakaan phpmailer. 1) Menggunakan fungsi mel () adalah mudah tetapi tidak boleh dipercayai, yang boleh menyebabkan e -mel memasuki spam atau tidak dapat dihantar. 2) PHPMailer menyediakan kawalan dan kebolehpercayaan yang lebih baik, dan menyokong surat HTML, lampiran dan pengesahan SMTP. 3) Pastikan tetapan SMTP dikonfigurasi dengan betul dan penyulitan (seperti startTLS atau SSL/TLS) digunakan untuk meningkatkan keselamatan. 4) Untuk sejumlah besar e -mel, pertimbangkan untuk menggunakan sistem giliran mel untuk mengoptimumkan prestasi.

E -mel PHP Lanjutan: Headers & Ciri -ciri KustomE -mel PHP Lanjutan: Headers & Ciri -ciri KustomMay 09, 2025 am 12:13 AM

CustomheadersandadvancedfeaturesInphpeMailenhanceFunctialityandreliability.1) customHeadersAddmetadataFortrackingandCategorization.2) htmlemailsallowformattingIntivity.3)

Panduan untuk menghantar e -mel dengan PHP & SMTPPanduan untuk menghantar e -mel dengan PHP & SMTPMay 09, 2025 am 12:06 AM

Menghantar mel menggunakan PHP dan SMTP boleh dicapai melalui Perpustakaan PHPMailer. 1) Pasang dan konfigurasikan PHPMailer, 2) Tetapkan butiran pelayan SMTP, 3) Tentukan kandungan e -mel, 4) Hantar e -mel dan mengendalikan kesilapan. Gunakan kaedah ini untuk memastikan kebolehpercayaan dan keselamatan e -mel.

Apakah kaedah terbaik untuk menghantar e -mel menggunakan php?Apakah kaedah terbaik untuk menghantar e -mel menggunakan php?May 08, 2025 am 12:21 AM

Thebestapproachforsendingemailsinphpisusingthephpmaillibraryduetoitsreliability, featureRichness, andeaseofuse.phpmailersupportssmtp, proveddetaileDerrorHandling, membolehkanSendsendingHtmlandPlainteMails, supportsattachments, danStoVeShanCess

Amalan terbaik untuk suntikan ketergantungan dalam phpAmalan terbaik untuk suntikan ketergantungan dalam phpMay 08, 2025 am 12:21 AM

Alasan untuk menggunakan suntikan ketergantungan (DI) ialah ia menggalakkan gandingan longgar, kebolehlihatan, dan pemeliharaan kod. 1) Gunakan pembina untuk menyuntik kebergantungan, 2) Elakkan menggunakan pencari perkhidmatan, 3) Gunakan bekas suntikan ketergantungan untuk menguruskan kebergantungan, 4) meningkatkan kesesuaian melalui suntikan suntikan, 5) Elakkan kebergantungan over-suntikan, 6) Pertimbangkan kesan DI terhadap prestasi.

Petua Penalaan Prestasi PHPPetua Penalaan Prestasi PHPMay 08, 2025 am 12:20 AM

Phpperformancetuningiscrucialbecauseitenhancesspeedandeficiency, whoarevitalforwebapplications.1) cachingwithapcureSdatabaseloadandimprovesresponsetimes.2)

Keselamatan e -mel PHP: Amalan terbaik untuk menghantar e -melKeselamatan e -mel PHP: Amalan terbaik untuk menghantar e -melMay 08, 2025 am 12:16 AM

TthebestpracticesforDailssecureeleynpinceDudududude: 1) usingSecureConfigurationsatiationswithsmtpandStartTartTlSencrryption, 2) vactrentatiatingIsTitionputStopReventInJectaCtAtactaSs, 3) engrypTyptingSensensitiVIdAdAlsHAlSiSsSenSsensSl ,SsengsSenSsensSl ,SsengSiSsSSSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSssSsSsSsSsSsSsSsSsSsSsSsSsSsSsSsSSSSsSSSSSSSSSHAsSsSSSSSHAsSsSengs.)

See all articles

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!