考虑这段代码(http://codepad.org/lJGcW7tU):
$str = '1
2
3
4
5
6';
var_dump(explode("\n", $str));
我希望输出如下:
array(6) {
[0]=>
string(1) "1"
[1]=>
string(1) "2"
[2]=>
string(1) "3"
[3]=>
string(1) "4"
[4]=>
string(1) "5"
[5]=>
string(1) "6"
}
但实际上,就是这样:
array(6) {
[0]=>
string(2) "1
"
[1]=>
string(2) "2
"
[2]=>
string(2) "3
"
[3]=>
string(2) "4
"
[4]=>
string(2) "5
"
[5]=>
string(1) "6"
}
explode
似乎为所有新数组元素添加了一个额外的字符,除了最后一个。这个字符在原始字符串中没有,所以它来自哪里?为什么?
答案 0 :(得分:3)
换行符为represented differently among different platforms。在Unix系统中,它只是"\n"
,而在基于Windows的系统上,它是"\r\n"
。
您的字符串可能包含"1\r\n2\r\n3\r\n(...)"
,这意味着当您在"\n"
上拆分时,结果的第一个索引为"1\r"
,第二个索引为"2\r"
,依此类推。 ..
不同的可能解决方案:
$str = "1\n2\n3\n4\n5\n6";
"\r\n"
而非"\n"