PHP数组游标实现对数组的各种操作详解


Posted in PHP onJanuary 26, 2016

本文实例分析了PHP数组游标实现对数组的各种操作。分享给大家供大家参考,具体如下:

如何不用foreach实现对数组实现循环?

答:我们只需要模拟foreach就行了,数组在执行foreach循环的时候,是有一个游标指向当前数组循环到的值,

那如果我们能拿到这个游标,并且操作游标,使游标前进或者后退,那么我们就能不用foreach而实现循环数组

直接上代码,清晰直观:

<?php 
$arr = array('你','若','安','好','便','是','晴','天');
//current()函数是取得游标所在数组位置的值
//next()是使游标向数组的尾部移动一格
for(;$v=current($arr);next($arr)){
  echo $v,'<br />';
}
/*
返回
你
若
安
好
便
是
晴
天
*/
//那么又如何使游标2步2步一走呢?
for(;$v=current($arr);){
  echo $v,'<br />';
  next($arr);
  next($arr);
}
//执行结果,没有反应,这是为什么呢?
//原因是前面一个循环游标已经到了数组的最尾部了
//因此,当执行current($arr)时总是返回false,
//因此第二个循环是不会执行的
//因此这里我们会用一个reset()方法来使游标重新指向数组的头部
reset($arr);
echo '<hr />';
for(;$v=current($arr);){
  echo $v,'<br />';
  next($arr);
  next($arr);
}
//那么又如何走2步,退一步呢?
reset($arr);
echo '<hr />';
for($flag=true;$v=current($arr);){
  echo $v,'<br />';
  if($flag){
    next($arr);
    next($arr);
    $flag=false;
  }else{
    prev($arr);
    $flag=true;
  }
}
/*
返回
你
安
若
好
安
便
好
是
便
晴
是
天
晴
*/
//如何倒着循环呢?
//这里要用到end()函数了,让数组的游标指向尾部
end($arr);
echo '<hr />';
for(;$v=current($arr);prev($arr)){
  echo $v,'<br />';
}
/*
返回:
天
晴
是
便
好
安
若
你
*/
//注意当数组的值等于0,false,null,undefined,""时,for循环的第二部会返回false,就会使循环终止
reset($arr);
echo '<hr />';
$arr2 = array('你','若',0,'好','便','是','晴','天');
for(;$v=current($arr2);next($arr2)){
  echo $v,'<br />';
}
/*
返回
你
若
*/
?>

除了这些还可以用key()函数得到游标所指向的键。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 引用是个坏习惯
Mar 12 PHP
PHP读取PDF内容配合Xpdf的使用
Nov 24 PHP
利用php递归实现无限分类 格式化数组的详解
Jun 08 PHP
PHP中session变量的销毁
Feb 27 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
yii2 resetful 授权验证详解
May 18 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
PHP crc32()函数讲解
Feb 14 PHP
php+redis实现消息队列功能示例
Sep 19 PHP
PHP面向对象程序设计实例分析
Jan 26 #PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 #PHP
php实现爬取和分析知乎用户数据
Jan 26 #PHP
简单谈谈php延迟静态绑定
Jan 26 #PHP
php制作的简单验证码识别代码
Jan 26 #PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 #PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 #PHP
You might like
php遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
php判断是否为ajax请求的方法
2016/11/29 PHP
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
实现elementUI表单的全局验证的方法步骤
2019/04/29 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
python切片及sys.argv[]用法详解
2018/05/25 Python
python创造虚拟环境方法总结
2019/03/04 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
python 邮件检测工具mmpi的使用
2021/01/04 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
安踏官方商城:anta.cn
2019/12/16 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
2015世界地球日活动总结
2015/02/09 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL