PHPでの質問です。

ファイルにあるデータを最終行から読み込むために
以下のものを作成しました。

$buff=file("data.dat");
$buff_reverse = array_reverse($buff);
$reverse_data = explode(",","$buff_reverse[$i]");

さらにexplodeで分割していますが、
これをもっと見やすくすることは可能でしょうか?

また1行の要素数を出すために以下のモノを作成しました。

$lines_get = fgets($line);
$lines_value = split(",","$lines_get");
$value_count = count($lines_value);


これらを1行にしたり、もっと別の関数を使ったりいったかたちで
スッキリさせることが可能であれば
アドバイスいただければと思います。

回答の条件
  • 1人5回まで
  • 登録:2007/01/12 14:50:34
  • 終了:2007/01/13 00:21:54

回答(2件)

id:GEN111 No.1

GEN111回答回数472ベストアンサー獲得回数582007/01/12 15:38:46

ポイント35pt

$reverse_data = explode(",","$buff_reverse[$i]");

[$i] があるということはここはループの中ですかね。

$buff=file("data.dat");

$buff_reverse = array_reverse($buff);

これくらいは一行にまとめて

$buff_reverse = array_reverse(file("data.dat")) ;

でいいんじゃないでしょうか。

$lines_get = fgets($line);

$lines_value = split(",","$lines_get");

$value_count = count($lines_value);

単に数えるだけだったら「カンマの数 + 1」で

$value_count = substr_count(fgets($line), ',') + 1 ; 

とか。

id:quocard

たしかに最初のモノはそれで1行にまとめられますね。

まだPHP初心者なもので当たり前のことでも

とても勉強になります。

2つめのものについては「,」の数を数えることで

同じことをするということですね。

その方法は思いつきませんでした。

とても参考になりました。

ありがとうございます。

2007/01/12 16:05:51
id:tobeoscontinue No.2

tobeoscontinue回答回数214ベストアンサー獲得回数542007/01/12 16:37:59

ポイント35pt

>>これをもっと見やすくすることは可能でしょうか?

機能がはっきりしている場合は、関数にするようにしています。

そうすることで見かけ上、すっきりします。

function file_cvs($name, $reverse = FALSE)
{
  $cvs = array();
  $buff = file($name);
  if ($buff) {
    if ($reverse) $buff = array_reverse($buff);
    foreach ($buff as $data)
      $cvs[] = explode(',', $data);
  }
  return $cvs;
}

print_r(file_cvs("data", TRUE));

ファイルが存在しない場合、ワーニングが出てしまうので、if ($buff)はあまり意味がないかもしれません。

id:quocard

ひとつの関数にするのも手ですね。

それぞれをまとめるより

大枠でまとめてしまうほうがあとあとの効率もよさそうですね。

ありがとうございました。

2007/01/13 00:21:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません