Php学习之each() 函数详解

本文和大家分享的主要是phpeach() 函数相关用法,一起来看看吧,希望对大家学习php有所帮助。

each 函数简介

(PHP 4, PHP 5, PHP 7)

each — 返回数组中当前的键/值对并将数组指针向前移动一步

array each ( array &$array )

  返回 array 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为01key和 value。单元 和 key 包含有数组单元的键名,和 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<XUEYUTIANLANG@163.COM>

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

  执行结果:

/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)

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

$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)

}

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));

  执行结果:

/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));

  执行结果:

/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)

}

个人小结

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

 

来源:Linux公社

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值