首页 > PHP 阅读:252

PHP遍历数组

PHP 编程中常用 for、foreach、each()、list() 对数组进行遍历。

for 循环遍历数组

使用 for 循环遍历数组的一个例子如下:
<?php
$fruits = array("lemon", "orange", "banana", "apple");
for ($i=0; $i < count($fruits); $i++) {
    echo current($fruits) . " ";
    echo $fruits[$i] . "<br/>";
}?>
以上程序的执行结果如下:

lemon lemon
lemon orange
lemon banana
lemon apple

从结果可知,这种使用 for 循环遍历数组的形式没有改变数组的内部指针。

foreach 遍历数组

示例如下:
<?php
$array = [0, 1, 2];
foreach ($array as &$val){  // 遍历数组
    echo $val;  
}
?>
运行以上程序的输出结果为:

012

再给出一个示例:
<?php
$array = [0, 1, 2];
foreach ($array as &$val){
    var_dump(current($array));  // 遍历数组, 使用current()输出数组指针指向的当前单元的值
}
?>
在 PHP 7 中运行以上程序的输出结果为:

int(0) int(0) int(0)

说明 PHP 7 没有改变数组内部的指针。

而在 PHP 7 之前的版本中则会输出:

int(1) int(2) bool(false)

说明 PHP 7 之前的版本在进行 foreach 循环时会改变数组内部的指针。

在使用 foreach 循环遍历数组的时候,foreach 是对数组的备份进行操作,在循环内部修改数组不会对循环之外访问数组有影响。示例如下:
<?php
$arr = array(0, 1, 2);
foreach ($arr as $val){
    $val = $val*2;  // 元素值乘以2
}
print_r($arr);
?>
运行程序,输出结果是:

Array
(
    [0] => 0
    [1] => 1
    [2] => 2
)

如果是按照引用循环,那么在循环内部对数组做的修改会影响数组本身。示例如下:
<?php
$arr = array(0, 1, 2);
foreach ($arr as &$val){
    $val = $val*2;  // 元素值乘以2
}
print_r($arr);
?>
运行以上程序的结果为:

Array
(
    [0] => 0
    [1] => 2
    [2] => 4
)

each() 和 list() 函数

each() 函数返回数组中当前的键值并将数组指针向前移动。在执行 each() 之后,数组指针将停留在数组中的下一个元素或者当碰到数组结尾时停留在最后一个元素。如果要再用 each 遍历数组,就必须使用 reset()。

each() 的使用示例如下:
<?php
$info = array("C语言中文网", "PHP教程", "http://c.biancheng.net/php/", "8年", "严长生");

$val1 = each($info);  //指针向后移动一步
print_r($val1);
echo current($info) . "\n";  //当前指针指向值

$val2 = each($info);
print_r($val2);
echo current($info) . "\n";
?>
执行以上程序的结果如下:

Array
(
    [1] => C语言中文网
    [value] => C语言中文网
    [0] => 0
    [key] => 0
)
PHP教程
Array
(
    [1] => PHP教程
    [value] => PHP教程
    [0] => 1
    [key] => 1
)
http://c.biancheng.net/php/


each() 函数和 list() 函数结合可以遍历数组,示例如下:
<?php
$info = array(
    "website" => "C语言中文网",
    "course" => "PHP教程",
    "url" => "http://c.biancheng.net/php/",
    "age" => "8年",
    "author" => "严长生"
);
while( list($key, $val) = each($info) ) {
    echo "$key => $val\n";
}
?>
执行以上程序的结果为:

website => C语言中文网
course => PHP教程
url => http://c.biancheng.net/php/
age => 8年
author => 严长生


也可以使用 list() 将数组的值分别赋给变量,示例如下:
<?php
$info = array("C语言中文网", "PHP教程", "http://c.biancheng.net/php/", "8年", "严长生");
list($website, $course, $url, $age, $author) = $info;
echo $website . "\n" . $course . "\n" . $url . "\n" . $age . "\n" . $author;
?>
执行以上程序的输出结果为:

C语言中文网
PHP教程
http://c.biancheng.net/php/
8年
严长生


注意以下例子:
<?php
$info = array("C语言中文网", "PHP教程", "http://c.biancheng.net/php/", "8年", "严长生");
list($arr[0], $arr[1], $arr[2]) = $info;
print_r($arr);
?>
在 PHP 5 中的输出结果是:

Array
(
    [2] => http://c.biancheng.net/php/
    [1] => PHP教程
    [0] => C语言中文网
)

在 PHP 7 中执行以上程序,输出结果为:

Array
(
    [0] => C语言中文网
    [1] => PHP教程
    [2] => http://c.biancheng.net/php/
)

PHP 7 改变了 list() 赋值的顺序,由原来的倒序赋值改成了正序赋值。

爱面试的程序媛,一个分享面试经验的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,定时分享程序员面试的那点事。

面试如何造火箭?工作如何拧螺丝?都在这个公号哦。

扫描二维码关注公众号,免费领取价值 1000 元的求职面试资料(限时免费)!

当你决定关注「爱面试的程序媛」,你已然超越了90%的程序员!

爱面试的程序媛二维码
微信扫描二维码关注