本文和大家分享的主要是php中each() 函數(shù)相關(guān)用法,一起來(lái)看看吧,希望對(duì)大家學(xué)習(xí)php有所幫助。
each 函數(shù)簡(jiǎn)介
(PHP 4, PHP 5, PHP 7)
each — 返回?cái)?shù)組中當(dāng)前的鍵/值對(duì)并將數(shù)組指針向前移動(dòng)一步
array each ( array &$array )
返回 array 數(shù)組中當(dāng)前指針位置的鍵/值對(duì)并向前移動(dòng)數(shù)組指針。鍵值對(duì)被返回為四個(gè)單元的數(shù)組,鍵名為0,1,key和 value。單元 0 和 key 包含有數(shù)組單元的鍵名,1 和 value 包含有數(shù)據(jù)。
如果內(nèi)部指針越過(guò)了數(shù)組的末端,則 each() 返回 FALSE。
通常在執(zhí)行 each() 之后,數(shù)組指針將停留在數(shù)組中的下一個(gè)單元或者當(dāng)碰到數(shù)組結(jié)尾時(shí)停留在最后一個(gè)單元。如果要再用 each 遍歷數(shù)組,必須使用 reset()。
驗(yàn)證each 函數(shù)對(duì)數(shù)組指針的操作影響
測(cè)試環(huán)境:
OS :CentOS 6.5
PHP: php 5.6
運(yùn)行模式: cli
DEMO 1: 數(shù)組內(nèi)部指針越過(guò)末端再次執(zhí)行each返回false
1 <?php
2 /**
3 * @description: php each 循環(huán)
4 *
5 * @author : snow wolf<XUEYUTIANLANG@163.COM>
6 *
7 * @date : 2016-07-19
8 */
9
10 /* each 作用是返回當(dāng)前數(shù)組的鍵值對(duì),并將當(dāng)前數(shù)組的指針向下移動(dòng)一步,若內(nèi)部指針越過(guò)了數(shù)組的末端返回false */
11
12 $arr = range(1,2);
13
14 while($list = each($arr))
15 {
16 var_dump($list);
17 sleep(1);
18 }
19
20 //因數(shù)組指針到達(dá)末端,返回false 所以未執(zhí)行 第二次循環(huán)
21 while($list = each($arr))
22 {
23 var_dump($list);
24 sleep(1);
25 }
26
27
28 echo '指針是否越過(guò)數(shù)組末端: ';
29 var_dump(each($arr));
30 2
執(zhí)行結(jié)果:
/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)
}
指針是否越過(guò)數(shù)組末端: /data/phpLoop/each.php:29:bool(false)
DEMO2: 驗(yàn)證,數(shù)組賦值是否會(huì)重置原來(lái)的數(shù)組指針
$tmpArr = $arr;
33
34 while($list = each($arr))
35 {
36 var_dump($list);
37 sleep(1);
38 }
39 echo '數(shù)組賦值測(cè)試指針是否越過(guò)數(shù)組末端: ';
40 var_dump(each($arr));
執(zhí)行結(jié)果:
/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 數(shù)組賦值測(cè)試指針是否越過(guò)數(shù)組末端:
/data/phpLoop/each.php:42:array(4) {
[1] =>
int(1)
'value' =>
int(1)
[0] =>
int(0)
'key' =>
int(0)
}
DEMO3: 全局化 arr 數(shù)組,無(wú)形參,無(wú)傳值,測(cè)試是否重置指針
/*全局化 arr 數(shù)組,無(wú)形參,無(wú)傳值,測(cè)試是否重置指針*/
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 函數(shù)調(diào)用測(cè)試指針是否越過(guò)數(shù)組末端: ';
63 var_dump(each($arr));
執(zhí)行結(jié)果:
/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 函數(shù)調(diào)用測(cè)試指針是否越過(guò)數(shù)組末端: /data/phpLoop/each.php:63:bool(false)
DEMO4: 直接檢測(cè) 函數(shù)方式,是否越過(guò)數(shù)組末端
/*直接檢測(cè) 函數(shù)方式,是否越過(guò)數(shù)組末端 */
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 函數(shù)直接調(diào)用測(cè)試指針是否越過(guò)數(shù)組末端: ';
80 var_dump(each($arr));
執(zhí)行結(jié)果:
/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 函數(shù)直接調(diào)用測(cè)試指針是否越過(guò)數(shù)組末端: /data/phpLoop/each.php:80:array(4) {
[1] =>
int(1)
'value' =>
int(1)
[0] =>
int(0)
'key' =>
int(0)
}
個(gè)人小結(jié)
在執(zhí)行 each() 之后,數(shù)組指針將停留在數(shù)組中的下一個(gè)單元或者當(dāng)碰到數(shù)組結(jié)尾時(shí)停留在最后一個(gè)單元,但如果此時(shí)對(duì)當(dāng)前數(shù)組賦值則會(huì)重置原來(lái)的數(shù)組指針,因此若在循環(huán)中需小心使用each 勿賦值,否則將會(huì)導(dǎo)致無(wú)限循環(huán)。
來(lái)源:Linux公社