PHP开发过程的那些坑(三) ——PHParray_shift函数
时间:2022-05-03
本文章向大家介绍PHP开发过程的那些坑(三) ——PHParray_shift函数,主要内容包括相关阅读:、PHP开发过程的那些坑(二) ——PHP empty函数、PHP开发过程的那些坑(一) ——对象拷贝、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
PHP开发过程的那些坑(三)——PHP array_shift函数
(原创内容,转载请注明来源,谢谢)
坑:
最近在自学数据结构,常常用PHP实现各种数据结构和算法。array_shift函数的作用是获取数组的第一个元素,并将其从数组中剔除。用array_shift+array_push可以实现队列的操作。例如官方手册的例子:
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);
结果是
Array( [0] => banana [1] => apple [2]=> raspberry)
但是,当遇到二维数组时,情况就不一样了。
$testArr =array(‘a’=>1, ‘b’=>2, ’c’=>3);
print_r(array_shift($testArr));//输出 1
print_r($testArr);//输出 Array([0]=>2, [1]=>3)
数组的下标都被改变了!
分析:
再经过几次代码调试后,发现确实array_shift函数会改变数组的下标。查阅网上资料,有一篇文章写的很好,https://my.oschina.net/u/437615/blog/297378。这篇文章是分析为什么PHP的array_shift和array_pop同样作为剔除数组的一个元素,性能上的差异非常大。
原因是,array_shift在剔除掉第一个元素后,会对数组进行重新排序。这会导致数组量大的时候,array_shift的速度会慢的无法忍受。
当然,这也就是我遇到的问题的原因。
改进措施:
将二维数组扩展成三维数组
$testArr =array(0=>array(‘a’=>1), 1=>array(‘b’=>2), 2=>array(’c’=>3));
print_r(array_shift($testArr));//输出 array(‘a’=>1)
print_r($testArr);//输出 Array([0]=>array(‘b’=>2), array(’c’=>3))
再用foreach的方式获取自己想要的内容。这样即保留了想要的数组下标,又能实现剔除数组的第一个元素。
——written by linhxx 2017.07.09
相关阅读:
PHP开发过程的那些坑(二) ——PHP empty函数
PHP开发过程的那些坑(一) ——对象拷贝
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- Spring Cloud Feign服务之间的调用
- Spring Cloud 之 Ribbon 负载均衡
- JS贪吃蛇
- 微信小程序——轮播图、组件传值、下拉刷新、导航 实战开发
- 从微信网页授权到OAuth 2.0
- 微信小程序常用组件
- React进阶篇(七)React 同构
- 商业数据分析从入门到入职(5)Python基本语法和数据类型
- JavaScript 同步和异步的执行机制问题
- Vue 与小程序:父组件给子组件传值的区别
- Canvas悟空推箱子
- Spring Cloud 之服务网关 Zuul (一)
- React进阶篇(八)react redux
- 通过一个简单例子理解JavaScript闭包和this对象
- Spring Cloud 之服务网关 Gateway (一)