1.函数的作用:返回数组当前元素位置的下一个元素

2.函数的参数:

  @param array &$array

3.

例子一:数组拷贝时,内部指针的位置也一起拷贝

  1. <?php
  2. $arr1 = ['last','next'];
  3. next($arr1);
  4. $arr2 = $arr1;
  5. echo "Pointer of arr1 is " .key($arr1) .". The value is '" . current($arr1) ."'\n";
  6. echo "Pointer of arr2 is " .key($arr2) .". The value is '" . current($arr1) ."'\n";

例子二: foreach 之后数组内部指针的位置不重置

  1. <?php
  2. $arr1 = ['last','next'];
  3. foreach($arr1 as $key => $value){
  4. echo "Number $key's value : $value\n";
  5. }
  6. $str = is_null(key($arr1));
  7. echo "The current key of the array of arr1 is " . ($str ? 'null' : $str) ;

例子三:

  1. <?php
  2. $arr1 = ['last','next'];
  3. next($arr1);
  4. $arr2 = array_values($arr1);
  5.  
  6. echo "The pointer's position of the array of arr1 is " .key($arr1) . "\n";
  7. echo "The pointer's position of the array of arr1 is " .key($arr2) . "\n";

例子四:接下来是比较奇异的两个地方,传数组参数给函数,看看指针的位置的情况:

1)指针重置的情况:

  1. <?php
  2. function testPointerPosition($array){
  3. echo "The current element of array in function is '" .current($array)."' and current key is " .key($array)."\n";
  4. }
  5.  
  6. $arr1 = ['last','next'];
  7. next($arr1);
  8. next($arr1);
  9. testPointerPosition($arr1);

2)指针未重置的情况:

  1. <?php
  2. function testPointerPosition($array){
  3. echo "The current element of array in function is '" .current($array)."' and current key is " .key($array)."\n";
  4. }
  5.  
  6. $arr1 = ['last','next'];
  7. next($arr1);
  8. testPointerPosition($arr1);

例子五:有的时候使用next()函数之后,你想判断该元素是不是存在,结果你这么用:

  1. <?php
  2. $arr = [1,false];
  3. next($arr);
  4. if(current($arr)){
  5. echo "The element exist!\n";
  6. }else{
  7. echo "The element doesn't exist!\n";
  8. }

刚好有个 false 元素,就有了错误的输出。所以应该这么用:

  1. <?php
  2. $arr = [1,false];
  3. next($arr);
  4. if(key($arr) === false){
  5. echo "Current element doesn't exist!\n";
  6. }else{
  7. echo "Current element exist!\n";
  8. }

记住用 “===” 符号。数组不会有键值为false的类型的,即使你初始化的时候,用false作键值,内部也会将其解释为 0,并覆盖先前的键值为 0 的元素。

随机推荐

  1. Hive bucket表

    Hive 桶 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是 针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余 ...

  2. eclipse下mybatis-generator-config插件

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration ...

  3. 05.Django基础五之django模型层(一)单表操作

    一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...

  4. Docker下实战zabbix三部曲之一:极速体验

    对于想学习和实践zabbix的读者来说,在真实环境搭建一套zabbix系统是件费时费力的事情,本文内容就是用docker来缩减搭建时间,目标是让读者们尽快投入zabbix系统的体验和实践: 环境信息 ...

  5. shell 获取当前目录下的jar文件

    1.示例 function getDir() { ` do fileName=$"/"$item if [ -d $fileName ] then echo $fileName&q ...

  6. Angular 开发NPM第三方包

    步骤: 创建第三方包 > 开发第三方包 > 测试第三方包 > 发布第三方包 > 使用第三方包 实例: 第一步:创建第三方包;; (创建项目,项目下创建第三方库) 1. 新建项目 ...

  7. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(5)- 划时代新品RT1170

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的划时代新品i.MXRT1170. 自2017年开始,每年的6月25日恩智浦都会在北京举行微控制 ...

  8. 【福利】离散&C++&硬件一笔记合集

    离散 C++ 硬件

  9. 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).

    Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists). 2017年02 ...

  10. 夯实Java基础系列21:Java8新特性终极指南

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...