人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: quocard
●カテゴリ:インターネット ウェブ制作
✍キーワード:array_reverse dat PHP アドバイス スッキリ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● GEN111
●35ポイント

$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 ; 

とか。

◎質問者からの返答

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

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

とても勉強になります。

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

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

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

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

ありがとうございます。


2 ● tobeoscontinue
●35ポイント

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

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

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

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)はあまり意味がないかもしれません。

◎質問者からの返答

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

それぞれをまとめるより

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ