PHP遍历数组的方法经常用到的有:
- for循环遍历
- foreach遍历
- each结合while、list遍历
for循环遍历
<?php
/**
* 1.for循环遍历-只能针对索引数组
*/
$for_arr = [1, 2, 3];
$for_arr_len = count($for_arr);
for($i = 0; $i < $for_arr_len; $i++) {
echo $for_arr[$i] . PHP_EOL;
}
//关联数组
$for_arr2 = ['a' => 1, 'b' => 2, 'c' => 3];
$key_arr = array_keys($for_arr2);
for($i = 0; $i < $for_arr_len; $i++) {
echo 'key=' . $key_arr[$i] . ', value=' . $for_arr2[$key_arr[$i]] . PHP_EOL;
}
foreach遍历
注意
:foreach遍历即可用于索引数组也可用于关联数组
/**
* 2.foreach循环遍历-既能针对索引数组又能针对关联数组
*/
//索引数组
$foreach_arr1 = [1, 2, 3];
foreach($foreach_arr1 as $k1 => $v1) {
echo 'key=' . $k1 . ', value=' . $v1 . PHP_EOL;
}
//关联数组
$foreach_arr2 = ['a' => 1, 'b' => 2, 'c' => 3];
foreach($foreach_arr2 as $k2 => $v2) {
echo 'key=' . $k2 . ', value=' . $v2 . PHP_EOL;
}
each 遍历(PHP 7.2.0 起废弃)
注意
:each 结合while、list遍历即可用于索引数组也可用于关联数组
/**
* 3.each结合while、list循环遍历--既能针对索引数组又能针对关联数组
*/
//索引数组
$each_arr1 = [1, 2, 3];
while(list($k1, $v1) = each($each_arr1)) {
echo 'key=' . $k1 . ', value=' . $v1 . PHP_EOL;
}
//关联数组
$each_arr2 = ['a' => 1, 'b' => 2, 'c' => 3];
while(list($k2, $v2) = each($each_arr2)) {
echo 'key=' . $k2 . ', value=' . $v2 . PHP_EOL;
}
foreach遍历和each遍历的区别
each()函数的作用是输出当前指针指向的数组元素并且指针在向前移动一位,当前指针已经指向数组元素的末尾的时候,each会返回false。这个时候,如果后面还有代码是通过each循环输出,则返回false,这个时候需要重置指针,让指针指向数组元素的第一个元素。
foreach 每次都会自己重置数组指针,把指针始终指向数组的第一个元素。
两个each
$each_arr = [1, 2, 3];
while(list($k, $v) = each($each_arr)) { //循环完毕后,数组指针回指向末尾的元素
var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}
while(list($k, $v) = each($each_arr)) { //由于指针已经指向数组的末位尾元素,each返回false,不进入循环。
var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}
结果:
$each_arr = [1, 2, 3];
while(list($k, $v) = each($each_arr)) { //循环完毕后,数组指针会指向末尾的元素
var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}
reset($each_arr); // 重置指针即指针指向数组第一个元素
while(list($k, $v) = each($each_arr)) {
var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}
结果:
$each_arr = [1, 2, 3];
while(list($k, $v) = each($each_arr)) { //循环完毕后,数组指针回指向末尾的元素
var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}
foreach($each_arr as $k => $v) { //foreach 每次都会把数组内部指针指向第一个元素
var_dump('key=' . $k . ', value=' . $v) . PHP_EOL;
}
结果:
PHP 5 提供了一种定义对象的方法使其可以通过单元列表来遍历,例如用 foreach 语句。默认情况下,所有可见属性都将被用于遍历
<?php
class MyClass
{
public $var1 = 'value 1';
public $var2 = 'value 2';
public $var3 = 'value 3';
protected $protected = 'protected var';
private $private = 'private var';
function iterateVisible() {
echo "MyClass::iterateVisible:\n";
foreach($this as $key => $value) {
print "$key => $value\n";
}
}
}
$class = new MyClass();
foreach($class as $key => $value) {
print "$key => $value\n";
}
echo "\n";
$class->iterateVisible();
var1 => value 1
var2 => value 2
var3 => value 3
MyClass::iterateVisible:
var1 => value 1
var2 => value 2
var3 => value 3
protected => protected var
private => private var
?>
总结:foreach通用性最强,推荐使用