[转载]php-数组操作foreach、each、reset、list

foreach



PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach (array_expression as $value) statement foreach (array_expression as $key = $value) statement


第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
自PHP 5 起,还可能遍历对象。
注意:
当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。

注意:
除非数组是被引用,foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此数组指针不会被 each() 结构改变,对返回的数组单元的修改也不会影响原数组。不过原数组的内部指针的确
在处理数组的过程中向前移动了。假定 foreach 循环运行到结束,原数组的内部指针将指向数组的结尾。
自 PHP 5 起,可以很容易地通过在 $value 之前加上 来修改数组的单元。此方法将以引用赋值而不是拷贝一个值。
?php
$arr=array(1,2,3,4);
foreach($arras$value){
$value=$value*2;
}
//$arrisnowarray(2,4,6,8)
?

此方法仅在被遍历的数组可以被引用时才可用(例如是个变量)。

注意:
foreach 不支持用@来抑制错误信息的能力。

用户可能注意到了以下的代码功能完全相同:
?php
$arr=array("one","two","three");
reset($arr);
while(list(,$value)=each($arr)){
echo"Value:$valuebr\n";
}

foreach($arras$value){
echo"Value:$valuebr/\n";
}
?

以下代码功能也完全相同:
?php
$arr=array("one","two","three");
reset($arr);
while(list($key,$value)=each($arr)){
echo"Key:$key;Value:$valuebr/\n";
}

foreach($arras$key=$value){
echo"Key:$key;Value:$valuebr/\n";
}
?


示范用法的更多例子:
?php
/*foreachexample1:valueonly*/

$a=array(1,2,3,17);

foreach($aas$v){
echo"Currentvalueof\$a:$v.\n";
}

/*foreachexample2:value(withkeyprintedforillustration)*/

$a=array(1,2,3,17);

$i=0;/*forillustrativepurposesonly*/

foreach($aas$v){
echo"\$a[$i]=$v.\n";
$i++;
}

/*foreachexample3:keyandvalue*/

$a=array(
"one"=1,
"two"=2,
"three"=3,
"seventeen"=17
);

foreach($aas$k=$v){
echo"\$a[$k]=$v.\n";
}

/*foreachexample4:multi-dimensionalarrays*/
$a=array();
$a[0][0]="a";
$a[0][1]="b";
$a[1][0]="y";
$a[1][1]="z";

foreach($aas$v1){
foreach($v1as$v2){
echo"$v2\n";
}
}

/*foreachexample5:dynamicarrays*/

foreach(array(1,2,3,4,5)as$v){
echo"$v\n";
}
?





each
(PHP 4, PHP 5)
each 返回数组中当前的键/值对并将数组指针向前移动一步

说明
array each
( array $array )
返回 array

数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单元的数组,键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。
如果内部指针越过了数组的末端,则 each()
返回 FALSE



例 288. each()
例子

?php
$foo=array("bob","fred","jussi","jouni","egon","marliese");
$bar=each($foo);
print_r($bar);
?
$bar 现在包含有如下的键/值对:
Array { [1] = bob [value] = bob [0] = 0 [key] = 0 }





?php
$foo=array("Robert"="Bob","Seppo"="Sepi");
$bar=each($foo);
print_r($bar);
?
$bar 现在包含有如下的键/值对:
Array { [1] = Bob [value] = Bob [0] = Robert [key] = Robert }


each()
经常和 list() 结合使用来遍历数组,例如:
例 289. 用 each()
遍历数组

?php
$fruit=array('a'='apple','b'='banana','c'='cranberry');
reset($fruit);
while(list($key,$val)=each($fruit)){
echo"$key=$val\n";
}
?
上例将输出:
a = apple b = banana c = cranberry




在执行 each()
之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()。
小心
因为将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上边的例子中如果我们在循环内部将 $fruit 赋给了另一个变量的话

以上内容转载自:http://deepfuture.javaeye.com/blog/606796




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值