PHP

PHP之each()函数输出空白问题

PHP

Posted by Waldo on August 25, 2018

each()函数

(PHP 4, PHP 5, PHP 7)

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

Warning

This function has been DEPRECATED as of PHP 7.2.0. Relying on this function is highly discouraged.

说明 ¶

array each ( array &$array )

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

在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()

foreach()函数

(PHP 4, PHP 5, PHP 7)

foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key

注意

each()和foreach()都会移动指针

为什么输出空白?

一定是因为在使用each()函数之前使用了foreach()函数

这时要使用reset()函数将指针初始化到0开始,即数组起始位置

<?php
	$arr=array('name'=>'Waldo','sex'=>'male','age'=>'20');
	var_dump($arr);
	echo '<hr>';

	foreach($arr as $key => $value){
	    echo $key.' => '.$value.'<br>';
	}
	echo '<br>';

	reset($arr);
	//因为上面数组的指针已经移动到数组末尾,下面使用each的时候发生指针越界,返回false,导致无法输出值。
	//因此使用reset()函数将指针初始化到0开始,即数组起始位置。
	echo "使用reset()后将有如下输出:";

	while(list($k, $v)=each($arr))
	{ 
    	echo $k.'=>'.$v.'<br>';
	}
?>	

输出如图:

TIM截图20180906164521.png