• 締切済み

explodeがよくわかりません。(初心者です。)

PHPのド初心者です。色々勉強初めて見ました。 諸先生方に教えてほしいのですが、 外部ファイルを読み込んで配列にするってのをやってるのですが、 外部ファイル 123.txtが ****************** 大きなリンゴ 小さな数字 呼び戻し ++++++++++++++++++ だったとします。 (以下に改行位置を↓で再度書きます。つまり5行あります。) ************************* 大きなリンゴ↓ 小さな数字↓ 呼び戻し↓ ↓ [EOF] ************************* これをtest.phpで以下のように記述しました。 **************** <?php //ファイルを読み込む $file = file_get_contents('123.txt'); //ファイルを改行で配列に入れる $word = explode("\r",$file); echo "word<br />"; var_dump($word); ?> ******************** としますと、 結果が ************************ word array(5) { [0]=> string(21) "大きなリンゴ" [1]=> string(16) " 小さな数字" [2]=> string(13) " 呼び戻し" [3]=> string(1) " " [4]=> string(1) " " } ************************ こうなります。 いけてるようなのですが、思った通りでなく [0] の "大きなリンゴ"はいいのですが、 [0] 以降のやつには、 [1]" 小さな数字" [2]" 呼び戻し"" [3]" " [4]" " わかりにくいかもですが、 最初のダブルコーテンションのあとに、謎の一文字が入ります。 *で表現しますと [0]"大きなリンゴ"(←これには入ってないです。) [1]"*小さな数字" [2]"*呼び戻し"" [3]"*" [4]"*" こんな感じになってるのです。 この*の文字が、やりたい事を邪魔をしてて先に進みません。 この*を消すには(というか、入らないように配列に入れるには)どうしたらいいのでしょうか? 根本的にわかってないかもなんですが、よろしくお願いいたします。 m(_ _)m

みんなの回答

noname#244856
noname#244856
回答No.4

最も簡単にできてお勧めの方法 $word = file('123.txt', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES); FILE_SKIP_EMPTY_LINESを指定すればrtrimする必要が無くなります。 FILE_IGNORE_NEW_LINESを指定すればarray_filterで空文字を取り除く必要が無くなります。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

元々存在したものでしょうから、 foreach ($word as $val) { for ($i = 0; $i < strlen($val); $i++) { printf('%02x', ord(substr($val, $i, 1))); } print '<br />'; } などとして「謎の一文字」がどういうバイナリなのかを確認すべきです。0d(\r)でexplodeしていますからcrlf改行のデータなら0a(\n)は残っているとは思います(rtrimすれば取り除けます)。 なお私もfile_get_contentsで読んでからexplodeするくらいなら、最初からfileで読む方をお勧めします。ただし行末の改行が残っているので、各行を処理するときにrtrimを通すことを忘れないように。

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

俺も1の人に同意。 なので、ただの補足&雑学。 この世界の改行コードって およそ三種類あって、「\r」はMacの改行コード。 windows は \r\n unix は \n サーバーは およそunix系なので \nで書くことが多い。 覚えなくていいけど、詳しいこと書くと、\r は CR(キャリッジリターン)で、\n は LF(ラインフィード)っつって、どっちも およそ同じ意味。 ちなみにファイルを配列として読み込みたいなら file関数がおすすめ。

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

explodeで、元の文字列に無かった物が入ることはありません。 つまりその先頭の文字は元々あった物です。 おそらくは、改行が \r\n であるファイルの行を、\r を区切りにして分割したので、\n が残ったのでは? "\r\n" で、explodeすれば良いかと思います。

関連するQ&A

専門家に質問してみよう