5.7 遍历数组
通常需要遍历数组并获得各个键或值(或者同时取得键和值),所以毫不奇怪,PHP为此提供了一些函数。许多函数能完成两项任务,不仅能获取当前指针位置的键或值,还能将指针移向下一个适当的位置。本节将介绍这些函数。
1. key()
![]()
key()函数返回input_array中位于当前指针位置的键元素。考虑下面的例子:

这将返回:
![]()
注意,每个key()调用不会推进指针。为此要使用next()函数,这个函数的唯一作用就是完成推进指针的任务。这个函数将在本节后面正式介绍。
2. reset()
![]()
reset()函数用来将input_array的指针设置回数组的开始位置。如果需要在一个脚本中多次查看或处理一个数组,就经常使用这个函数,另外这个函数还常用于排序结束时。
3. each()
![]()
each()函数返回input_array的当前键/值对,并将指针推进一个位置。返回的数组包含四个键,键0和key包含键名,而键1和value包含相应的数据。如果执行each()前指针位于数组末尾,则返回FALSE。
4. current()
![]()
current()函数返回位于target_array数组当前指针位置的数组值。注意,它与next()、prev()和end()函数不同,current()不移动指针。示例如下:

5. end()
![]()
end()函数将指针移向target_array的最后一个位置,并返回最后一个元素。示例如下:
![]()
6. next()
![]()
next()函数返回紧接着放在当前数组指针的下一个位置的数组值。示例如下:
![]()
7. prev()
![]()
prev()函数返回位于当前指针前一个位置的数组值,如果指针本来就位于数组的第一个位置,则返回FALSE。
8. array_walk()
![]()
array_walk()函数将input_array中的各个元素传递给自定义函数function。当你需要对各个数组元素完成某个特定动作时,这个函数就很有用。注意,如果希望真正修改数组键/值对,就需要将每个键/值对作为引用传递给函数。
自定义函数必须接受两个输入参数:第一个表示数组的当前值,第二个表示当前键。如果调用array_walk()时给出了可选的userdata参数,它的值将作为第三个参数传递给自定义函数。
你可能在挠头了,考虑这个函数是怎么使用的。可能最有说明力的一个例子就是对用户提供的表单数组进行有效性检查。假设要求用户提供他认为最能描述所在州的6个关键词。表单源代码如代码清单5-1所示。
代码清单5-1 在表单中使用数组

这个表单信息再发送给某个脚本,即表单中指定的submitdata.php。此脚本应当检查用户数据,然后将数据插入到数据库中,以备查阅。使用array_walk(),就可以通过存储在表单验证类中的一个函数来轻松地检查这些关键字的有效性:

其结果是,数组中的每个值都传递给strip_tags()函数,这个函数将删除值中的所有HTML和PHP标记。当然,还需要完成其他的输入检查,但这对于演示array_walk()的用法已经足够了。
注解 如果你不熟悉PHP的表单处理功能,请参见第12章。
9. array_reverse()
![]()
array_reverse()函数将target数组中元素的顺序逆置。如果可选参数preserve_keys为TRUE,则保持键映射。否则,重新摆放后的各个值将对应于先前该位置上的相应键。
![]()
可以与启用preserve_keys时得到的结果做个比较:
![]()
使用关联键的数组将不受preserve_keys的影响,对于关联数组,键映射总是会保持。
10. array_flip()
![]()
array_flip()函数将使数组target_array中键及其相应值倒换角色。示例如下:








