前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP开发过程的那些坑(三) ——PHParray_shift函数

PHP开发过程的那些坑(三) ——PHParray_shift函数

作者头像
用户1327360
发布2018-03-07 14:19:14
8640
发布2018-03-07 14:19:14
举报
文章被收录于专栏:决胜机器学习

PHP开发过程的那些坑(三)——PHP array_shift函数

(原创内容,转载请注明来源,谢谢)

坑:

最近在自学数据结构,常常用PHP实现各种数据结构和算法。array_shift函数的作用是获取数组的第一个元素,并将其从数组中剔除。用array_shift+array_push可以实现队列的操作。例如官方手册的例子:

代码语言:javascript
复制
    $stack = array("orange", "banana", "apple", "raspberry");
    $fruit = array_shift($stack);
    print_r($stack);

结果是

代码语言:javascript
复制
Array( [0] => banana [1] => apple [2]=> raspberry)

但是,当遇到二维数组时,情况就不一样了。

代码语言:javascript
复制
$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的速度会慢的无法忍受。

当然,这也就是我遇到的问题的原因。

改进措施:

将二维数组扩展成三维数组

代码语言:javascript
复制
$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开发过程的那些坑(一) ——对象拷贝

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相关阅读:
  • PHP开发过程的那些坑(二) ——PHP empty函数
  • PHP开发过程的那些坑(一) ——对象拷贝
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档