0

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

当我尝试使用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);

效果很好。

4

2 回答 2

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);
于 2012-10-03T21:52:20.327 回答
0

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

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

foreach ($fileArray as $key => $thisLine) {
    if ( condition ) {
        $fileArray[$key] = "changed state";
    }
}
于 2012-10-03T21:52:53.683 回答