我有一个数组,其中包含我必须处理的文件行,数组的每个元素都是文件的一行。处理完毕后,我将文件内爆,写出并使用它。
当我尝试使用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);
哪种方法很好。
答案 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";
}
}