PHP中foreach与其他语言的不同

本文比较了PHP中的foreach语句与Java/C/Python的差异,介绍了PHP两种foreach格式,强调了PHP遍历过程中数组的复制和引用问题。
摘要由CSDN通过智能技术生成

在自学PHP的过程中,发现PHP中的foreach与JAVA/C/Python等语言有所区别。

一、正常在JAVA/C/Python中的foreach常用的语法结构都是

foreach(数据类型 变量名 in 数组名)

{

//code;

}

例子:

List<string> myStrings = new List<string>();

        // 向列表添加一些字符串元素
        myStrings.Add("Google");
        myStrings.Add("Runoob");

  // 使用 foreach 循环遍历列表中的元素
        foreach (string s in myStrings)
        {
            Console.WriteLine(s);
        }

二、而在PHP中的foreach有两种格式

foreach (iterable_expression as $value)
    statement
foreach (iterable_expression as $key => $value)
    statement

第一种格式遍历给定的 iterable_expression 迭代器。每次循环中,当前单元的值被赋给 $value

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key

注意 foreach 不会修改类似 current() 和 key() 函数所使用的数组内部指针。

还能够自定义遍历对象

<?php

/* foreach 示例 1:仅 value */

$a = array(1, 2, 3, 17);

foreach ($a as $v) {
echo "Current value of \$a: $v.\n";
}

//输出 Current value of $a: 1. Current value of $a: 2. Current value of $a: 3. Current value of $a: 17

/* foreach 示例 2:key 和 value */

$a = array(
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => 17
);

foreach ($a as $k => $v) {
echo "\$a[$k] => $v.\n";
}



//输出  $a[one] => 1. $a[two] => 2. $a[three] => 3. $a[seventeen] => 17.

?>

当有同名的数组元素时,就可以使用第二种格式进行遍历。

但是要注意,在php中foreach的循环遍历实际是复制了一个原来的数组。所以若要通过在 $value 之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// 现在 $arr 是 array(2, 4, 6, 8)
unset($value); // 最后取消掉引用
?>

此时,数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁,不用unset()销毁,会导致内部指针无法回到最初位置。导致后续如果再次遍历该数组可能会出错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值