如何确保在PHP的'foreach'循环中重置该值?

时间:2010-04-28 10:45:30

标签: php

我正在编写一个简单的PHP页面,并使用了一些foreach循环。

以下是脚本:

$arrs = array("a", "b", "c");

foreach ($arrs as $arr) {
    if(substr($arr,0,1)=="b") {
        echo "This is b";
    }     
} // End of first 'foreach' loop, and I didn't use 'ifelse' here.

当这个foreach结束时,我写了另一个foreach循环,其中foreach循环中的所有值都与之前的foreach相同。

foreach ($arrs as $arr) {
    if(substr($arr,0,1)=="c") {
        echo "This is c";
    }     
}

我不确定两个foreach循环具有相同的值和键是否是一个好习惯。

值是否会在第一个foreach循环中被覆盖?

4 个答案:

答案 0 :(得分:6)

直到你开始使用引用然后你可以得到奇怪的行为,例如:

<?php
$array = array(1,2,3,4);
//notice reference &
foreach ($array as & $item) {   }

$array2 = array(10, 11, 12, 13);
foreach ($array2 as $item) {   }

print_r($array);

输出:

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

由于第一个foreach将$item作为对$array[3]的引用,$array[3]会依次设置为$array2中的每个值。

您可以在第一个unset($item)之后解决此问题foreach,这将删除引用,但这实际上不是您的问题,因为您没有使用foreach的引用。

答案 1 :(得分:6)

来自documentation of foreach的两个值得注意的笔记:

  

注意:当foreach首次开始执行时,内部数组指针会自动重置到数组的第一个元素。这意味着您无需在reset()循环之前调用foreach

  

注意:除非引用了数组,否则foreach在指定数组的副本上运行而不是数组本身。 foreach对数组指针有一些副作用。 foreach期间或之后不依赖数组指针而不重置

答案 2 :(得分:1)

因为你没有写入数组,只读取它并打印出来,所以数组中的值都不会改变。

通过执行此操作,您可以节省两次循环数组的时间:

$arrs = array("a", "b", "c");

foreach ($arrs as $arr) {
    if(substr($arr,0,1)=="b") {
        echo "This is b";
    }
    if(substr($arr,0,1)=="c") {
        echo "This is c";
    }
}

答案 3 :(得分:1)

你只需要一个foreach循环。

对Jon所说的更简单的方法是:

$arrs = array("a", "b", "c");

foreach ($arrs as $arr)
    if ($arr != "a")
        echo 'This is ' . $arr;

这比使用substr更容易,更快,因为您已经在使用foreach循环。并尽量不要用大量的if语句污染它,如果你发现自己这样做,最好使用switch语句,速度要快得多。

干杯:)