PHP each() 函数用法简介

lbcmail 2017-01-22

  • 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
运行模式: cli

DEMO 1: 数组内部指针越过末端再次执行each返回false

1 <?php
  2 /**
  3  * @description: php each 循环
  4  * 
  5  * @author : snow wolf <[email protected]>
  6  *
  7  * @date   : 2016-07-19
  8  */
  9 
 10 /* each 作用是返回当前数组的键值对,并将当前数组的指针向下移动一步,若内部指针越过了数组的末端返回false */
 11 
 12 $arr = range(1,2);
 13 
 14 while($list = each($arr))
 15 {
 16     var_dump($list);
 17     sleep(1);
 18 }
 19 
 20 //因数组指针到达末端,返回false 所以未执行 第二次循环
 21 while($list = each($arr))
 22 {
 23     var_dump($list);
 24     sleep(1);
 25 }
 26 
 27 
 28 echo '指针是否越过数组末端: ';
 29 var_dump(each($arr));
 30 2
PHP each() 函数用法简介

执行结果:

/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)
PHP each() 函数用法简介

DEMO2: 验证,数组赋值是否会重置原来的数组指针

$tmpArr = $arr;
 33 
 34 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)
}
\n 数组赋值测试指针是否越过数组末端: 
/data/phpLoop/each.php:42:
array(4) {
  [1] =>
  int(1)
  'value' =>
  int(1)
  [0] =>
  int(0)
  'key' =>
  int(0)
}
PHP each() 函数用法简介

DEMO3: 全局化 arr 数组,无形参,无传值,测试是否重置指针

/*全局化 arr 数组,无形参,无传值,测试是否重置指针*/
 48 function doEach()
 49 {
 50     global $arr;
 51     while($list = each($arr))
 52     {
 53         var_dump($list);
 54         sleep(1);
 55     }
 56 
 57 }
 58 
 59 doEach();
 60 doEach();
 61 
 62 echo '\n 函数调用测试指针是否越过数组末端: ';
 63 var_dump(each($arr));
PHP each() 函数用法简介

执行结果:

/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)
}
\n 函数调用测试指针是否越过数组末端: /data/phpLoop/each.php:63:
bool(false)

DEMO4: 直接检测 函数方式,是否越过数组末端

/*直接检测 函数方式,是否越过数组末端 */
 66 
 67 function funEach($arr)
 68 {
 69     while($list = each($arr))
 70     {
 71         var_dump($list);
 72         sleep(1);
 73     }
 74 }
 75 
 76 funEach($arr);
 77 funEach($arr);
 78 
 79 echo '\n 函数直接调用测试指针是否越过数组末端: ';
 80 var_dump(each($arr));
PHP each() 函数用法简介

执行结果:

/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)
}
\n 函数直接调用测试指针是否越过数组末端: /data/phpLoop/each.php:80:
array(4) {
  [1] =>
  int(1)
  'value' =>
  int(1)
  [0] =>
  int(0)
  'key' =>
  int(0)
}
PHP each() 函数用法简介

个人小结

    在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元,但如果此时对当前数组赋值则会重置原来的数组指针,因此若在循环中需小心使用each 勿赋值,否则将会导致无限循环。

相关推荐