each() 经常和 list() 结合使用来遍历数组。本例与上例类似,不过循环输出了整个数组:<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");reset($people);while (list($key, $val) = each($people)) //Mark_a
{
echo "$key => $val<br />";
}
?>输出:
0 => Peter
1 => Joe
2 => Glenn
3 => Cleveland例子解释 // Mark_b
因为将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上例中如果我们在循环内部将 $people 赋给了另一个变量的话将会导致无限循环。首先想问的是,在PHP中,数组名与在C/C++中是同样的含义吗?(即为一个符号常量,值为该数组的首地址);// 前提1
Mark_a: each函数使数组内部指针逐渐后移,当移到末端的后一位之后,each将返回FALSE, 之前返回的都是数组(each返回“数组”:可否照上述前提1所理解为内存中某块由each函数建立空间的首地址吗?亦即each每执行一次都会在内存中新开辟一块空间用来存放当前元素的key和value值,猜想这空间大概是在堆区吧?),继续讨论,最后一次返回的是FALSE,这与list的语法格式不符啊,list的右端是规定了为数组的,而现在只是一个逻辑值?但是这并没有导致最终的解释错误?
Mark_b: 照上述前提1所理解,就不能理会这段话的含义了,况且我写出了下列测试代码:<?php $people = array("Peter", "Joe", "Glenn", "Cleveland");reset($people);while ($tt = each($people))
{
echo "{$tt["key"]} => {$tt["value"]}<br />";
}
?>
输出无误:
0 => Peter
1 => Joe
2 => Glenn
3 => Cleveland
$people = array("Peter", "Joe", "Glenn", "Cleveland");reset($people);while (list($key, $val) = each($people)) //Mark_a
{
echo "$key => $val<br />";
}
?>输出:
0 => Peter
1 => Joe
2 => Glenn
3 => Cleveland例子解释 // Mark_b
因为将一个数组赋值给另一个数组时会重置原来的数组指针,因此在上例中如果我们在循环内部将 $people 赋给了另一个变量的话将会导致无限循环。首先想问的是,在PHP中,数组名与在C/C++中是同样的含义吗?(即为一个符号常量,值为该数组的首地址);// 前提1
Mark_a: each函数使数组内部指针逐渐后移,当移到末端的后一位之后,each将返回FALSE, 之前返回的都是数组(each返回“数组”:可否照上述前提1所理解为内存中某块由each函数建立空间的首地址吗?亦即each每执行一次都会在内存中新开辟一块空间用来存放当前元素的key和value值,猜想这空间大概是在堆区吧?),继续讨论,最后一次返回的是FALSE,这与list的语法格式不符啊,list的右端是规定了为数组的,而现在只是一个逻辑值?但是这并没有导致最终的解释错误?
Mark_b: 照上述前提1所理解,就不能理会这段话的含义了,况且我写出了下列测试代码:<?php $people = array("Peter", "Joe", "Glenn", "Cleveland");reset($people);while ($tt = each($people))
{
echo "{$tt["key"]} => {$tt["value"]}<br />";
}
?>
输出无误:
0 => Peter
1 => Joe
2 => Glenn
3 => Cleveland
解决方案 »
- php jquery 二级联动的时候为什么第二个select在选的时候chang里面的事件不被触发呢?
- 登陆的问题
- js打开一php的程序url时,为什么php的setcookie无效了!
- 学习PHP一定要下载APACHE for windows的版本吗?
- 我的ultraedit怎么改不了字体啊?
- 有PHP经验请进哦,机会多多啊^&^
- 初学:什么叫PHP?它有什么作用?
- session_start();出错! 为什么呀,
- 天哪!这可咋办??急!急!(在线等待)
- wamp2.5 win7 64位主页打不开问题,请教各位达人,急急急!!!!
- 编辑器如何获取到上个页面传递过来的值???
- 请教一条SQL语句
echo "{$tt[0]} => {$tt[1]}<br />";
都是可以的应该不会each每执行一次都会在内存中新开辟一块空间
数组在PHP里好象是在一个HASH表里。
应该是直接操作这个HASH表。前面有个帖子就说了这些相关问题,是百度的人发的。去看看吧。
字符串index使用time33算法求hash值,
整数index直接跟某个数按位与运算截断.each并没有dump整个数组,只是dump了数组的一个元素,
并且对数组进行了zend_hash_move_forward(target_hash),
把数组的internal指针往前移动了一个位置,
这点跟print_r不同,print_r每次都是从头开始遍历,
而each需要从当前位置取一个元素,each可以each($a), each($b)的多个数组穿插进行,
所以each只能把位置信息维护在数组内部,因此each之后,索引会自动下移。
所以一般不使用 each函数 抽取数组元素在PHP中,数组名与在C/C++中是同样的含义吗?
不是!while 循环的退出条件是:循环表达式为假(空、false、0)
for($i=0;$i<count($array);$i++)
foreach($array as $key=>$value)