for vs foreach - 对数组元素的引用

时间:2012-10-03 21:49:48

标签: php arrays loops

我有一个数组,其中包含我必须处理的文件行,数组的每个元素都是文件的一行。处理完毕后,我将文件内爆,写出并使用它。

当我尝试使用foreach时,它无效。我怀疑它是在创建元素的副本而不是直接引用元素,所以使用了for循环,这确实有效。

我的问题是,在这种情况下是否有某种方法可以使用foreach循环,或者在重新定义数组元素时必须始终使用for循环?

示例代码:

$fileArray = file('blah.txt');
foreach ($fileArray as $thisLine) {
    if ( condition ) {
        $thisLine = "changed state";
    }
}
$newFileArray = implode('',$fileArray);

没有工作vs:

$fileArray = file('blah.txt');
for ($x=0;$x<count($fileArray);$x++) {
    if ( condition ) {
        $fileArray[$x] = "changed state";
    }
}
$newFileArray = implode('',$fileArray);

哪种方法很好。

2 个答案:

答案 0 :(得分:3)

$fileArray = file('blah.txt');
foreach ($fileArray as $key => $thisLine) {
    if ( condition ) {
        $fileArray[$key] = "changed state";
    }
}
$newFileArray = implode('',$fileArray);

或直接通过引用传递:

$fileArray = file('blah.txt');
foreach ($fileArray as &$thisLine) {
    if ( condition ) {
        $thisLine = "changed state";
    }
}
$newFileArray = implode('',$fileArray);

答案 1 :(得分:0)

在您的第一个示例中,您正在更改字符串的副本。 $thisLine不是对数组中元素的引用,而是数组元素的副本。

在第二个示例中,您将直接更改阵列。您可以使用foreach,但前提是您返回引用数组:

foreach ($fileArray as $key => $thisLine) {
    if ( condition ) {
        $fileArray[$key] = "changed state";
    }
}