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 - 2 行目など。

スクリプトを実行した結果は次のとおりです。

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

ご覧のとおり、最初の行に問題があります。正しく配列に追加されたようですが、なぜか値が「1」と異なっています。最初の行だけで、他の行には問題はありません。この問題は、最初の行をスキップして、2 行目の値を配列に追加し始めることで解決できますが、私が書いたように機能しないのはなぜだろうか? 通常、UTF8 でエンコードされたテキストやページの表示や読み取りに問題はありません。「file_get_contents」の代わりに「file」に変更しても問題は解決しません。どんな提案でも大歓迎です。ps PHP バージョン 5.3.1

更新:問題は UTF-8 BOM でした。以下の解決策を参照してください。みんな助けてくれてありがとう!

4

3 に答える 3

1

主な問題はこれですが、まだ解決できていません。var_dump($array_test[0]) で、次の出力が得られます。

string '1' (length=4)

これが、if 条件が true になっていないため、「最初の行」がエコーされない理由です。

また、ファイルを共有できればtest.txt、問題を簡単に見つけることができます。

編集:部分的な解決策

@Tino Didriksen で説明されているように、最初の if 条件の前にこの行を追加して、目的の出力を得ることができます。

$array_test[0] = substr_replace($array_test[0],'',0,3);
于 2013-01-24T05:52:58.113 に答える
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 に答える
0

(やってみてください) -- 間違った解決策です。下記参照

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

そのような場合には、関数file()が 1 つあります。

$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 に答える