PHP next
1.函数的作用:返回数组当前元素位置的下一个元素
2.函数的参数:
@param array &$array
3.
例子一:数组拷贝时,内部指针的位置也一起拷贝
<?php
$arr1 = ['last','next'];
next($arr1);
$arr2 = $arr1;
echo "Pointer of arr1 is " .key($arr1) .". The value is '" . current($arr1) ."'\n";
echo "Pointer of arr2 is " .key($arr2) .". The value is '" . current($arr1) ."'\n";

例子二: foreach 之后数组内部指针的位置不重置
<?php
$arr1 = ['last','next'];
foreach($arr1 as $key => $value){
echo "Number $key's value : $value\n";
}
$str = is_null(key($arr1));
echo "The current key of the array of arr1 is " . ($str ? 'null' : $str) ;

例子三:
<?php
$arr1 = ['last','next'];
next($arr1);
$arr2 = array_values($arr1); echo "The pointer's position of the array of arr1 is " .key($arr1) . "\n";
echo "The pointer's position of the array of arr1 is " .key($arr2) . "\n";

例子四:接下来是比较奇异的两个地方,传数组参数给函数,看看指针的位置的情况:
1)指针重置的情况:
<?php
function testPointerPosition($array){
echo "The current element of array in function is '" .current($array)."' and current key is " .key($array)."\n";
} $arr1 = ['last','next'];
next($arr1);
next($arr1);
testPointerPosition($arr1);

2)指针未重置的情况:
<?php
function testPointerPosition($array){
echo "The current element of array in function is '" .current($array)."' and current key is " .key($array)."\n";
} $arr1 = ['last','next'];
next($arr1);
testPointerPosition($arr1);

例子五:有的时候使用next()函数之后,你想判断该元素是不是存在,结果你这么用:
<?php
$arr = [1,false];
next($arr);
if(current($arr)){
echo "The element exist!\n";
}else{
echo "The element doesn't exist!\n";
}

刚好有个 false 元素,就有了错误的输出。所以应该这么用:
<?php
$arr = [1,false];
next($arr);
if(key($arr) === false){
echo "Current element doesn't exist!\n";
}else{
echo "Current element exist!\n";
}

记住用 “===” 符号。数组不会有键值为false的类型的,即使你初始化的时候,用false作键值,内部也会将其解释为 0,并覆盖先前的键值为 0 的元素。
随机推荐
- javascript实现二叉搜索树
在使用javascript实现基本的数据结构中,练习了好几周,对基本的数据结构如 栈.队列.链表.集合.哈希表.树.图等内容进行了总结并且写了笔记和代码. 在 github中可以看到 点击查看,可以 ...
- Nginx 的三大功能
1.HTTP服务器 Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML.图片)通过HTTP协议展现给客户端. 2.反向代理服务器 Nginx也是反向代理服务器. 说反向代理之前先说一 ...
- 16 (OC)* UIAnimation和CoreAnimation
目录 一 Core Animation 二 核心动画 2.1 基础动画 2.2 关键帧动画 2.3 动画组 2.4 转场动画 2.5 逐帧动画 三 UIView动画封装 3.1 基础动画 3.2 弹簧 ...
- Sping学习笔记(一)----Spring源码阅读环境的搭建
idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...
- Kubernetes学习之应用部署变迁
从物理单机.虚拟化(容器化)到云原生 历史 云原生 ---初期 总结
- [Leetcode] 第319题 灯泡开关
一.题目描述 初始时有 n 个灯泡关闭. 第 1 轮,你打开所有的灯泡. 第 2 轮,每两个灯泡你关闭一次. 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭).第 i 轮,每 i ...
- shiro+spring
公司自用的管理系统使用了shiro,但是对于这个登录页面跳转.登录的过程逻辑以及登录成功或者失败的跳转页面一直不理解,查看相关文档资料,整理出一些结果并本地调试测试,记录下备以后回顾之用. 对于spr ...
- 关于canvas合成分享图
最近在uni-app项目中遇到一个合成分享图的需求,其实最开始是用原生写法来做的,后台发现在PC端测试是可以的,但在APP模拟器中会出现问题,可能是因为两者的js环境不同吧,uni-app官网也说了这 ...
- 使用flask-mail扩展发送邮件
使用flask-mail扩展发送电子邮件 在我们开发完web系统后,一些特定的事件发生时,系统要自动发送相关邮件至管理员,运维人员和其他相关人员.python标准库中的smtplib包也可以用在Fla ...
- TypeScript中使用getElementXXX()
如果只是看解决方法,可以直接跳到第二小节 简述 Angular 1.x版本是用JavaScript编写的,我们在百度Angular经常会搜索到AngularJS,并不是JavaScript的什么衍生版 ...