鍍金池/ 問(wèn)答/PHP/ 求大牛詳解each函數(shù)

求大牛詳解each函數(shù)

php 的each函數(shù)看不懂,求大神解答。

<?php 
$people = array("a", "B", "C", "D");
print_r($people);
echo "<hr>";
print_r (each($people));
echo "<hr>";
print_r (each($people));
echo "<hr>";
print_r (each($people));
echo "<hr>";
print_r (each($people));
?>

最終結(jié)果如下
Array ( [0] => a [1] => B [2] => C [3] => D )
Array ( [1] => a [value] => a [0] => 0 [key] => 0 )
Array ( [1] => B [value] => B [0] => 1 [key] => 1 )
Array ( [1] => C [value] => C [0] => 2 [key] => 2 )
為什么會(huì)有個(gè)value出現(xiàn),還有key?
我覺(jué)得自己沒(méi)有看懂規(guī)則,所以求大神指導(dǎo)一下,本人小白。謝謝了 拜托

回答
編輯回答
雨萌萌
2017年5月24日 05:44
編輯回答
菊外人

each在php7.2已經(jīng)被廢棄,可以不用太關(guān)心。

each() 返回的是某個(gè)元素的key和value,并把指針指向下一個(gè)元素。

Array ( 
  [1] => a
  [value] => a
  [0] => 0
  [key] => 0
)

下標(biāo)0和下標(biāo)key其實(shí)都是數(shù)組當(dāng)前指針對(duì)應(yīng)的元素的key,因?yàn)槟闾峁┑臄?shù)組,key是隱式的,所以會(huì)從0開(kāi)頭。比如我們提供一個(gè)顯式的key

$arr = ['hello' => 'world', 'hi' => '原罪'];

print_r(each($arr));
print_r(each($arr));

答案是:

Array
(
    [1] => world
    [value] => world
    [0] => hello
    [key] => hello
)
Array
(
    [1] => 原罪
    [value] => 原罪
    [0] => hi
    [key] => hi
)

證明0和key的下標(biāo)都是值原數(shù)組的key,而1和value都是指原數(shù)組的value。第二個(gè)print_r證明each()執(zhí)行后會(huì)把指針往后移動(dòng)。

所以一般有這種用法

$arr = ['a', 'b', 'c'];

while (list($key, $value) = each($arr)) {
    $arr[$key] = $value . '_i';
}

print_r($arr); // ['a_i', 'b_i', 'c_i'];

這段代碼從我的文章復(fù)制的遍歷PHP數(shù)組的6種方式

2017年5月29日 16:13
編輯回答
避風(fēng)港

php執(zhí)行 each() 之后,數(shù)組指針將停留在數(shù)組中的下一個(gè)單元或者當(dāng)碰到數(shù)組結(jié)尾時(shí)停留在最后一個(gè)單元。并且會(huì)返回為四個(gè)單元的數(shù)組,鍵名為0,1,key和 value。單元 0 和 key 包含有數(shù)組單元的鍵名,1 和 value 包含有數(shù)據(jù)。

2017年3月3日 15:01