PHP 数组:遍历数组 1 个改进

遍历数组

开始

PHP 编程中常用 forforeachlist 对数组进行遍历。

for 循环遍历数组

例子

$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 遍历数组

例子

$array = [0, 1, 2];
foreach ($array as &$val){  // 遍历数组
    echo $val;  
}

输出:

012

再给出一个示例:

$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 是对数组的备份进行操作,在循环内部修改数组不会对循环之外访问数组有影响。示例如下:

$arr = array(0, 1, 2);
foreach ($arr as $val){
    $val = $val*2;  // 元素值乘以2
}
print_r($arr);

运行程序,输出结果是:

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

如果是按照引用循环,那么在循环内部对数组做的修改会影响数组本身。示例如下:

$arr = array(0, 1, 2);
foreach ($arr as &$val){
    $val = $val*2;  // 元素值乘以2
}
print_r($arr);

运行以上程序的结果为:

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

list() 函数

list() 函数用于在一次操作中给一组变量赋值。

语法

list(var1, var2...)

参数

参数 描述
var1 必需。第一个需要赋值的变量。
var2,… 可选。更多需要赋值的变量。

例子

$my_array = array("Dog","Cat","Horse");

list($a, $b, $c) = $my_array;
echo "I have several animals, a $a, a $b and a $c.";

输出:

I have several animals, a Dog, a Cat and a Horse.

注意下面这个例子:

$info = array("PHP", "PHP教程", "Laravel");
list($arr[0], $arr[1], $arr[2]) = $info;
print_r($arr);

在 PHP 5 中的输出结果是:

Array
(
    [2] => Laravel
    [1] => PHP教程
    [0] => PHP
)

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

Array
(
    [0] => PHP
    [1] => PHP教程
    [2] => Laravel
)

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

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!