目錄
[PHP源码阅读]array_pop和array_shift函数,jsarraypopshift
函数语法
array_pop
array_shift
代码示例
执行步骤
小结
首頁 php教程 php手册 [PHP源码阅读]array_pop和array_shift函数,jsarraypopshift

[PHP源码阅读]array_pop和array_shift函数,jsarraypopshift

Jun 13, 2016 am 08:38 AM
array

[PHP源码阅读]array_pop和array_shift函数,jsarraypopshift

上篇文章介绍了PHP添加元素到数组的函数,那么当然有从数组中删除元素。array_pop和array_shift只从数组的头或尾删除一个元素。经过阅读源码,发现这两个函数的实现都是调用了同一个函数--_phpi_pop来实现从数组中删除一个数组元素的功能。因此解读时将这两个函数一并讲了。

我在github上有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

 

函数语法

array_pop

<p>mixed array_pop ( array $&array )</p>
登入後複製

array_pop函数弹出并返回数组的最后一个单元,并将数组长度减一。如果array为空则返回NULL。

array_shift

<p>mixed array_shift ( array &$array )</p>
登入後複製

将数组开头的单元移出数组并作为结果返回,将array长度减一并将所有数字键值改为从0开始计数,文字键值不变。

代码示例

下面代码展示了array_pop和array_shift的使用方法

<span>$arr</span> = <span>array</span>(&lsquo;apple&rsquo;, &lsquo;banana&rsquo;,<span> &lsquo;cat&rsquo;);
</span><span>$val</span> = <span>array_pop</span>(<span>$arr</span>); <span>//</span><span> val == cat</span>
<span>$arr</span> = <span>array</span>(&lsquo;apple&rsquo;, &lsquo;banana&rsquo;,<span> &lsquo;cat&rsquo;);
</span><span>$val</span> = <span>array_shift</span>(<span>$arr</span>); <span>//</span><span> val == apple</span>
登入後複製

执行步骤

两个函数都是调用了_phpi_pop函数,区别不同的是调用_phpi_pop函数时传递的第二个参数off_the_end的不同,如果off_the_end是1,则是array_pop,否则是array_shift。下面是_phpi_pop这个函数执行的详细步骤:

<p>1、如果数组长度为0,则返回NULL。</p>
<p>2、根据off_the_end参数移动内部指针指向需要删除的数组元素。</p>
<p>3、设置返回值为第二步指针指向的元素。</p>
<p>4、从数组中移出第一个或最后一个值并将长度减一。</p>
<p>5、如果是array_shift操作,则需要重置数组下标,将数字下标改为从0开始计数,文字键值不变;否则只需要修改下一个数字索引的位置。</p>
<p>6、重置array指针。</p>
登入後複製

函数执行的过程可以用下面的流程图描述:

array_pop

 

 

                                array_shift

 

array_pop和array_shift调用此函数执行的步骤都大同小异,不同之处在于:

1、在移动指针时,前者移动到数组尾部,后者移动指针到数组第一个单元。

2、删除操作完成后,前者只需修改下一个数字索引的位置,而后者需要重置数组下标。

小结

如果两个函数实现的步骤差不多,可以用一个参数区别执行的是哪一个函数以减少程序中重复的代码。

 

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

如果本文对你有帮助,请点下推荐吧,谢谢^_^

 

最后再安利一下,我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

更多源码文章,欢迎访问个人主页继续查看:hoohack

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
使用C#中的Array.Sort函數對陣列進行排序 使用C#中的Array.Sort函數對陣列進行排序 Nov 18, 2023 am 10:37 AM

標題:C#中使用Array.Sort函數對陣列進行排序的範例正文:在C#中,陣列是一種常用的資料結構,經常需要對陣列進行排序運算。 C#提供了Array類,其中有Sort方法可以方便地對陣列進行排序。本文將示範如何使用C#中的Array.Sort函數對陣列進行排序,並提供具體的程式碼範例。首先,我們要先了解Array.Sort函數的基本用法。 Array.So

簡單明了的PHP array_merge_recursive()函式使用方法 簡單明了的PHP array_merge_recursive()函式使用方法 Jun 27, 2023 pm 01:48 PM

在進行PHP編程時,我們常常需要將數組合併。 PHP提供了array_merge()函數來完成數組合併的工作,但是當數組中存在相同的鍵時,函數會覆寫原來的值。為了解決這個問題,PHP在語言中還提供了一個array_merge_recursive()函數,該函數可以合併數組並保留相同鍵的值,使得程式的設計變得更加靈活。 array_merge

如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組 如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組 Jun 26, 2023 pm 01:41 PM

在PHP中,有許多強大的陣列函數可以讓陣列的操作更加方便和快速。當我們需要將兩個陣列拼成一個關聯數組時,可以使用PHP的array_combine函數來實現這一操作。這個函數其實是用來將一個陣列的鍵當作另一個陣列的值,合併成一個新的關聯數組。接下來,我們將會講解如何使用PHP中的array_combine函數將兩個陣列拼成關聯數組。了解array_comb

PHP array_fill()函數用法詳解 PHP array_fill()函數用法詳解 Jun 27, 2023 am 08:42 AM

在PHP程式設計中,陣列是一種非常重要的資料結構,能夠輕鬆處理大量資料。 PHP中提供了許多陣列相關的函數,array_fill()就是其中之一。本篇文章將詳細介紹array_fill()函數的用法,以及在實際應用上的一些技巧。一、array_fill()函數概述array_fill()函數的作用是建立一個指定長度的、由相同的值組成的陣列。具體來說,該函數的語法

PHP array_change_key_case()函數使用方法介紹 PHP array_change_key_case()函數使用方法介紹 Jun 27, 2023 am 10:43 AM

在PHP程式設計中,陣列是一個常用到的資料型別。而關於陣列的運算子也是相當多的,其中包含了array_change_key_case()函數。這個函數可以將數組中鍵名的大小寫轉換,從而方便我們進行資料的處理。本文就來介紹PHP中array_change_key_case()函數的使用方法。一、函數語法及參數array_change_ke

Java中的ArrayIndexOutOfBoundsException異常常見原因是什麼? Java中的ArrayIndexOutOfBoundsException異常常見原因是什麼? Jun 24, 2023 pm 10:39 PM

Java是一種非常強大的程式語言,廣泛應用於各種開發領域。但是,在Java程式設計過程中,開發人員常會遇到ArrayIndexOutOfBoundsException異常。那麼,這個異常的常見原因是什麼呢? ArrayIndexOutOfBoundsException是Java中常見的一個執行時期例外。它表示在存取資料時,數組下標超出了數組的範圍。常見的原因包括以

如何在Java中將LinkedList轉換為Array? 如何在Java中將LinkedList轉換為Array? Aug 29, 2023 pm 11:09 PM

LinkedList類別的toArray()方法將目前的LinkedList物件轉換為物件類型的陣列並傳回它。此數組按正確順序(從第一個元素到最後一個元素)包含此列表中的所有元素。它充當基於數組和基於集合的API之間的橋樑。因此,將LinkedList轉換為陣列-實例化LinkedList類別。使用add()方法填充它。呼叫上面建立的鍊錶上的toArray()方法並檢索物件數組。將物件數組的每個元素轉換為字串。範例 即時示範importjava.util.Arrays;importjava.uti

Java中的ArrayStoreException異常的解決方法 Java中的ArrayStoreException異常的解決方法 Jun 25, 2023 am 08:05 AM

在Java的開發中,我們經常使用陣列來儲存一系列的數據,因為陣列的便利性和效能優勢。但是,在使用陣列的過程中,會出現一些異常情況,其中一個常見的異常就是ArrayStoreException。當我們向數組中儲存不相容的資料類型時,就會拋出這個異常。這篇文章將介紹什麼是ArrayStoreException異常、它的產生原因,以及如何解決這個例外。一、Arr

See all articles