3

私は次のようなtxtファイルを持っています:

これは1行目です。

これは2行目です。

これは3行目です。

これが残りです。

Loremなど。

PHPを使用して最初の3行を$変数に入れ、次にドキュメント内の他のすべてを$変数に入れたいと思います。

私はこれである程度の成功を収めました:

<?php

$file = fopen("text.txt","r");
$count = "0";

while(! feof($file))
  {
  $count++;

  if ($count=="1") {
  $line1 = fgets($file);
  }

  if ($count=="2") {
  $line2 = fgets($file);
  }

  if ($count=="3") {
  $line3 = fgets($file);
  }

//everything else?

}

echo $line1;
echo $line2;
echo $line3;
//echo $everythingelse;

fclose($file);

?>

次の作品:

echo fgets($file);

しかし、これはしません:

$line1 = fgets($file);

それで、A)それで何が間違っているのか、B)ファイルの残りをどのように取得するのか、C)これを実装するためのより良い方法はありますか?私のやり方は不器用で、誰かがこれをすべて行うことができる明白な何かを提案するように感じます。

みんなありがとう!

4

3 に答える 3

4

これはfile()、ファイル全体を行の配列に読み込むのに最も簡単です。次に、最初の3つを削除して返すなどの配列操作を使用して、それらを。array_splice()で文字列に結合し直すことができます\n

// Reads the file into an array
$lines = file($file);

// Cuts off everything after the first three
$the_rest = array_splice($lines, 3);
// leaving the first three in the original array $lines
$first_three = $lines;

// Stick them back together as strings by implode() with newlines
$first_three = implode("\n", $first_three);
$the_rest = implode("\n", $the_rest);
于 2012-04-17T17:58:52.970 に答える
3

あなたはこれを行うことができます:

$data = file("text.txt");
$beginning = implode(PHP_EOL,array_splice($data,0,3));
$end = implode(PHP_EOL,$data);

使用される関数:file、、implodeおよび定数array_splicePHP_EOL

于 2012-04-17T17:59:49.010 に答える
2

A)コードはifの終わりまで問題ありません:ループが次回、次の行の内容で上書きするため、から返された値fgetsを変数に単純に割り当てることはできません。whileそれは最後の行に到達しましたが、それはどういうわけか常に空です。の出力を直接印刷すると、ループを進むにつれてfgetswhileが1行ずつエコーします。

B)この小さな修正でコードは正常に実行されます。連結代入演算子を使用して、変数を上書きするのではなく、行を変数に追加します。(文字列演算子

<?php

$file = fopen("text.txt","r");
$count = "0";

while(!feof($file)) {
  $count++;    
    switch ($count) {
        case "1":
            $line1 = fgets($file);
            break;
        case "2":
            $line2 = fgets($file);
            break;
        case "3":
            $line3 = fgets($file);
            break;
        default: 
            $everythingelse .= fgets($file);
    }
}

echo $everythingelse;

fclose($file);

echo "\n\n\n\n\n\n";
echo "Plus, here is line one: ".$line1."\n";
echo "This is line three: ".$line3."\n";
echo "And finally, line two: ".$line2."\n";

(私もあなたのifを同じことをするスイッチに置き換えました)

出力例: スクリーンショットを出力

C)あなたの方法はあなたの目的のためにそれを修正したと思います、特にあなたがすでにfgetsを通して(そしてそれ故にしばらく使用して)ファイルの内容を取得しているなら。このメソッドは、あなたのようにしばらくの間動作するようにネイティブです。もちろん、KolinkとMichaelが提案したように、を使用して実行するimplodeこともできます。これはさらに高速な場合があります。

于 2012-04-17T18:57:09.113 に答える