资讯专栏INFORMATION COLUMN

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

wuyangnju / 526人阅读

摘要:和只从数组的头或尾删除一个元素。因此解读时将这两个函数一并讲了。函数语法函数弹出并返回数组的最后一个单元,并将数组长度减一。将数组开头的单元移出数组并作为结果返回,将长度减一并将所有数字键值改为从开始计数,文字键值不变。

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

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

函数语法 array_pop
mixed array_pop ( array $&array )

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

array_shift
mixed array_shift ( array &$array )

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

代码示例

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

$arr = array(‘apple’, ‘banana’, ‘cat’);
$val = array_pop($arr); // val == cat
$arr = array(‘apple’, ‘banana’, ‘cat’);
$val = array_shift($arr); // val == apple
执行步骤

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

1、如果数组长度为0,则返回NULL。

2、根据off_the_end参数移动内部指针指向需要删除的数组元素。

3、设置返回值为第二步指针指向的元素。

4、从数组中移出第一个或最后一个值并将长度减一。

5、如果是array_shift操作,则需要重置数组下标,将数字下标改为从0开始计数,文字键值不变;否则只需要修改下一个数字索引的位置。

6、重置array指针。

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

下面两个图展示了根据上面的示例代码执行时数组元素和内部指针的变化的效果图:

array_pop

array_shift

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

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

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

小结

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

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

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21614.html

相关文章

  • 图解几种常见的线性表

    摘要:下面来看一下,有哪些数据结构属于线性表吧栈特性先进后出只有唯一的一个出入口介绍栈又名堆栈,它是一种运算受限的线性表。 原文是在我自己博客中,小伙伴也可以点阅读原文进行跳转查看,还有好听的背景音乐噢背景音乐已取消~ 2333333 线性表 什么是线性表?就是一种连续或间断存储的数组,这里的连续和间断是针对物理内存空间中线性表元素之间是否连续,其中连续数组对应内置数组的实现方式,间断数组对...

    wawor4827 评论0 收藏0
  • 优化函数式编程:向 PHP 移植 Clojure 函数

    摘要:不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,都可以做到。但我们不禁要问,擅长函数式编程吗本文系国内管理平台工程师编译整理。在函数式编程中,目标之一是减轻副作用。 许多通用程序设计语言试图兼容大多数编程范式,PHP 就属于其中之一。不论你想要成熟的面向对象的程序设计,还是程序式或函数式编程,PHP 都可以做到。但我们不禁要问,PHP 擅长函数式编程吗?本文系国内 ITOM...

    MarvinZhang 评论0 收藏0
  • PHP开发过程中数组汇总 [ 持续更新系列 ]

    摘要:必选规定被搜索的数组可选如果设置为,则在数组中检查给定值的类型,默认是搜索数组中是否存在指定的值。回调函数接受的参数数目应该和传递给函数的数组数目一致。 开发过程中经常会使用到数组函数,故特地总结出来,自己熟悉,同时供大家参考!(实例部分会抽空尽快完成) 一、目录 array_merge(); 合并数组 array_keys(); array_filter(); in_array()...

    twohappy 评论0 收藏0
  • PHP 学习总结之数组

    摘要:概述我们知道,在编程语言中,数组的使用频率是很高的,几乎每个脚本都会使用到。循环缺点遍历完成之后,不能对数组进行第二次遍历数组内部指针指向了最后一个元素。 概述 我们知道,在 PHP 编程语言中,数组的使用频率是很高的,几乎每个脚本都会使用到。 PHP 自带了大量的、优秀的操作数组的函数以供我们使用,本文就对这些数组函数的使用做一些分类和总结,方便大家以后查阅。 创建 1. range...

    wangdai 评论0 收藏0
  • PHP: array数组常用API

    摘要:语法数组删除数组的最后一项语法数组在数组的最末添加一项语法数组删除数组的首项语法数组在数组的首部添加一项案例分析 1:数组的指针操作: 语法:current(数组) 当前指针指向的单元值(默认是第零个)语法 next(数组) 当前指针往下移动一帧语法 prev(数组) 当前指针往前移动一个指针语法 end(array) 将当前指针移动到最后一项语法 ...

    Cheriselalala 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<