数组游标实现对数组的各种操作(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学习笔记之数组游标操作
数组有N个单元,同时只能操作一个单元.比如循环时,只能一个一个单元读取他的值. 那么数组是怎么记住刚才读取的是哪个单元,接着读取下个单元的呢? 在数组内部,有一个指针,指针指向某一个单元. 每循环一个 ...
- [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组
1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...
- 快学Scala 第三课 (定长数组,变长数组, 数组循环, 数组转换, 数组常用操作)
定长数组定义: val ar = new Array[Int](10) val arr = Array("aa", "bb") 定长数组赋值: arr(0) = ...
- linux shell 中的数组的取值 遍历 替换 删除操作
引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...
- php第三天-数组的定义,数组的遍历,常规数组的操作
0x01 数组分类 在php中有两种数组:索引数组和关联数组 索引数组的索引值是整数,以0开始.当通过位置来标识东西时用索引数组. 关联数组是以字符串作为索引值,关联数组更像操作表.索引值为列名,用于 ...
- 搬运1:关于对C语言中数组名取地址加减等操作的一点探究
对于数组名取地址强制转换的操作 偶然在晚上学了C语言指针后网页闲逛找题时,被一个数组名取地址搞糊涂了,在自己试验加探索后我稍微悟了一点东西. 代码如下: #include<stdio.h> ...
- 获取单列集合,双列集合,数组的Stream流对象以及简单操作
获取流对象 获取单列集合,双列集合,数组的流对象 单列集合获取流对象: 1.java.util.Collection接口中加入了default方法stream()获取流对象,因此其所有实现类均可通过此 ...
- 窥探Swift之数组安全索引与数组切片
今天是元宵节,祝大家元宵节快乐!在Swift中的数组和字典中下标是非常常见的,数组可以通过索引下标进行元素的查询,字典可以通过键下标来获取相应的值.在使用数组时,一个常见的致命错误就是数组越界.如果在 ...
- 【BZOJ-1452】Count 树状数组 套 树状数组
1452: [JSOI2009]Count Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1769 Solved: 1059[Submit][Stat ...
随机推荐
- LeetCode OJ:Restore IP Addresses(存储IP地址)
Given a string containing only digits, restore it by returning all possible valid IP address combina ...
- 怎样安装 OpenJDK 8 in Ubuntu 14.04 & 12.04 LTS
OpenJDK Java 8 has been made into official Ubuntu repositories for 14.10 Utopic and higher. For Ubun ...
- cookies分类
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie. 内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的.硬盘Cooki ...
- GPU编程自学3 —— CUDA程序初探
深度学习的兴起,使得多线程以及GPU编程逐渐成为算法工程师无法规避的问题.这里主要记录自己的GPU自学历程. 目录 <GPU编程自学1 -- 引言> <GPU编程自学2 -- CUD ...
- CentOS 7常用工具安装
git 在Linux下开发项目,少不了要使用git工具,安装方法十分简单,通过一条 yum 指令既可完成安装: yum install git 安装完成后检测版本: # git --version g ...
- 有关项目依赖包发生 Manifest Merge 冲突的详细解决方案
安卓开发使用 Gradle 插件管理依赖包确实非常方便,尤其是在解决一些依赖冲突的问题上.比如,重复依赖的问题,具体内容请我之前写的一篇文章: 有关 Android Studio 重复引入包的问题和解 ...
- Xcode5.1.1支持低版本和image not found和Couldn't register XXXX with the bootstrap server. Error: unknown error code.
一:问题 targets中证书的设置 1.项目支持多设备(Xcode5.1.1支持低版本) 2.真机测试要确保Code Siging 设置没问题 支持的最低版本 二 :问题:image not f ...
- Objective C----手动管理内存和自动管理内存
对象的引用计数(Reference Counting) 正常情况下,当一段代码需要访问某个对象时,该对象的引用的计数加1:当这段代码不再访问该对象时,该对象的引用计数减1,表示这段代码不再访问该对象: ...
- Mac安装最新tensorflow遇到的坑,记录下方便后人
之前其他mac电脑安装tensorflow时候一切顺利,一行命令sudo pip install tensorflow就高搞定了,但是今天在新mac上安装tensorflow时候出现了一个bug,搞了 ...
- Eclipse自动补全设置与Eclipse源代码下载
以前使用VisualStudio和Sublime写代码的时候有很完善的代码提示,但是最近开始使用Eclipse弄JAVA的时候发现它的代码提示不是很习惯.上网找了一些资料,修改了代码提示的方式,记录在 ...