0

我有以下代码:

$array_test = array();

$file = file_get_contents ('./test.txt');

$file_array = explode("\n", $file);

foreach ($file_array as $line) {

    $word = trim($line);
    $array_test[] = $word;
}

echo $array_test[0];

if ($array_test[0] == "1") { echo 'first line'; }

echo $array_test[1];

if ($array_test[1] == "2") { echo 'second line'; }

print_r ($array_test);

test.txt 是以 UTF-8 编码的文件。它有 5 行。在每一行我都有一个数字:1 - 第一行,2 - 第二行,等等。

运行脚本的结果如下:

1
2
second line
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)

如您所见,第一行存在问题。似乎它已正确添加到数组中,但不知何故,它的值与“1”不同。其他行没有问题,只有第一行。可以通过跳过第一行并开始将第二行的值添加到数组中来解决问题,但我只是想知道为什么它不像我写的那样工作?通常我在显示或阅读 UTF8 编码的文本或页面时没有任何问题。更改为“file”而不是“file_get_contents”并不能解决问题。任何建议将不胜感激。ps PHP 版本 5.3.1

更新:问题是 UTF-8 BOM。请参阅下面的解决方案。感谢大家的帮助!

4

3 回答 3

1

主要问题是这个,但我还不能解决它。在 var_dump($array_test[0]) 我得到以下输出:

string '1' (length=4)

这就是“第一行”没有回显的原因,因为 if 条件不成立。

另外,如果你可以分享你的test.txt文件,则很容易发现问题。

编辑:部分解决方案

您可以在第一个 if 条件之前添加此行,以按照@Tino Didriksen 的描述处理此行为以获得所需的输出。

$array_test[0] = substr_replace($array_test[0],'',0,3);
于 2013-01-24T05:52:58.113 回答
0

(尝试做)——错误的解决方案。见下文

if($array_test[0] === "1") echo "first line";

对于这种情况,有一个函数file() :

$file = file_get_contents ('./test.txt');
$file_array = explode("\n", $file);

我错了!

var_dump 给了我们一个答案:

string(2) "1
"

字符串中有换行符。

尝试做:

$word = trim($line,"\r\n ");
于 2013-01-24T05:19:14.380 回答
0

请尝试以下更新的代码:

$array_test = array();

$file = file_get_contents ('./test.txt');

$file_array = explode("\n", $file);

foreach ($file_array as $line) {

    $word = trim($line);
    $array_test[] = $word;
}

echo $array_test[0];

if ($array_test[0][0] == "1") { echo 'first line'; }

echo $array_test[1];

if ($array_test[1][0] == "2") { echo 'second line'; }
于 2013-01-24T05:30:56.573 回答