Welcome 微信登录

首页 / 操作系统 / Linux / PHP each() 函数用法简介

  • each 函数用法简介
  • 验证each 函数对数组指针的操作影响
  • 个人小结

each 函数简介

(PHP 4, PHP 5, PHP 7)
each — 返回数组中当前的键/值对并将数组指针向前移动一步
array each ( array &$array )
返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为0,1,key和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。    如果内部指针越过了数组的末端,则 each() 返回 FALSE。    通常在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()。

验证each 函数对数组指针的操作影响

测试环境:

OS : CentOS 6.5
PHP: php 5.6
运行模式: cliDEMO 1: 数组内部指针越过末端再次执行each返回false1 <?php2 /**3* @description: php each 循环4* 5* @author : snow wolf <xueyutianlang@163.com>6*7* @date : 2016-07-198*/910 /* each 作用是返回当前数组的键值对,并将当前数组的指针向下移动一步,若内部指针越过了数组的末端返回false */ 1112 $arr = range(1,2); 1314 while($list = each($arr)) 15 { 16 var_dump($list); 17 sleep(1); 18 } 1920 //因数组指针到达末端,返回false 所以未执行 第二次循环 21 while($list = each($arr)) 22 { 23 var_dump($list); 24 sleep(1); 25 } 262728 echo "指针是否越过数组末端: "; 29 var_dump(each($arr)); 30 2执行结果: /data/phpLoop/each.php:16:array(4) {[1] =>int(1)"value" =>int(1)[0] =>int(0)"key" =>int(0)}/data/phpLoop/each.php:16:array(4) {[1] =>int(2)"value" =>int(2)[0] =>int(1)"key" =>int(1)}指针是否越过数组末端: /data/phpLoop/each.php:29:bool(false)DEMO2: 验证,数组赋值是否会重置原来的数组指针 $tmpArr = $arr; 3334 while($list = each($arr)) 35 {36 var_dump($list); 37 sleep(1); 38 } 39 echo "数组赋值测试指针是否越过数组末端: "; 40 var_dump(each($arr));执行结果: /data/phpLoop/each.php:35:array(4) {[1] =>int(1)"value" =>int(1)[0] =>int(0)"key" =>int(0)}/data/phpLoop/each.php:35:array(4) {[1] =>int(2)"value" =>int(2)[0] =>int(1)"key" =>int(1)} 数组赋值测试指针是否越过数组末端: /data/phpLoop/each.php:42:array(4) {[1] =>int(1)"value" =>int(1)[0] =>int(0)"key" =>int(0)}DEMO3: 全局化 arr 数组,无形参,无传值,测试是否重置指针 /*全局化 arr 数组,无形参,无传值,测试是否重置指针*/ 48 function doEach() 49 { 50 global $arr; 51 while($list = each($arr)) 52 { 53 var_dump($list); 54 sleep(1); 55 } 5657 } 5859 doEach(); 60 doEach(); 6162 echo " 函数调用测试指针是否越过数组末端: "; 63 var_dump(each($arr));执行结果: /data/phpLoop/each.php:53:array(4) {[1] =>int(1)"value" =>int(1)[0] =>int(0)"key" =>int(0)}/data/phpLoop/each.php:53:array(4) {[1] =>int(2)"value" =>int(2)[0] =>int(1)"key" =>int(1)} 函数调用测试指针是否越过数组末端: /data/phpLoop/each.php:63:bool(false)DEMO4: 直接检测 函数方式,是否越过数组末端 /*直接检测 函数方式,是否越过数组末端 */ 6667 function funEach($arr) 68 { 69 while($list = each($arr)) 70 { 71 var_dump($list); 72 sleep(1); 73 } 74 } 7576 funEach($arr); 77 funEach($arr); 7879 echo " 函数直接调用测试指针是否越过数组末端: "; 80 var_dump(each($arr));执行结果: /data/phpLoop/each.php:71:array(4) {[1] =>int(1)"value" =>int(1)[0] =>int(0)"key" =>int(0)}/data/phpLoop/each.php:71:array(4) {[1] =>int(2)"value" =>int(2)[0] =>int(1)"key" =>int(1)}/data/phpLoop/each.php:71:array(4) {[1] =>int(1)"value" =>int(1)[0] =>int(0)"key" =>int(0)}/data/phpLoop/each.php:71:array(4) {[1] =>int(2)"value" =>int(2)[0] =>int(1)"key" =>int(1)} 函数直接调用测试指针是否越过数组末端: /data/phpLoop/each.php:80:array(4) {[1] =>int(1)"value" =>int(1)[0] =>int(0)"key" =>int(0)}

个人小结

    在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元,但如果此时对当前数组赋值则会重置原来的数组指针,因此若在循环中需小心使用each 勿赋值,否则将会导致无限循环。本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139810.htm