【发布时间】:2010-07-27 15:04:57
【问题描述】:
这是一个愚蠢的例子,但确切地说明了我的问题。在某些情况下,数组已成功修改,而在另一些情况下则没有,为什么?值是按值赋予foreach的吗?并且输出也搞砸了,有些行似乎有 '\r\n' 其他行没有。
$arr = file('text.txt');
echo '<pre>';
foreach( $arr as $x => $line){
if( $x % 3){ unset( $arr[$x]); } // this works
else{ $arr[$x+1] += 1;} // this don't
echo "[$x] => ${arr[$x+1]}";
}
print_r( $arr);
文本.txt:
0
1
2
3
4
5
6
输出:
[0] => 2[1] => 2
[2] => 3
[3] => 5[4] => 5
[5] => 6[6] => 1 个数组
(
[0] => 0
[3] => 3
[6] => 6
[7] => 1
)
编辑:
这个例子并没有真正完成任何事情,只是为了表明发生了意外的事情是没有用的,所以,这里有一些更接近我需要做的事情:
<?php
$arr = file('text.txt');
echo '<pre>';
foreach( $arr as $x => $line){
if( preg_match("/word$/", $line)){
$line = preg_replace( "/word$/", '', $line);
$arr[$x+1] = 'word ' . $arr[$x+1];
}
}
print_r( $arr);
文本.txt:
测试0
test1word
测试2
数组中的预期值:
[0] => 测试0
[1] => 测试1
[2] => 单词 test2
【问题讨论】:
-
修改是个糟糕的词。
-
您不需要在问题标题中包含 [括号中的关键字]。这就是标签的用途。我已经更新了标题并修复了“修改”。 :)
标签: php reference foreach behavior