テキストファイルの読み込みを逆順に表示したい。 - PHPプロ!Q&A掲示板

2584

  • 0P

テキストファイルの読み込みを逆順に表示したい。

質問日時 / 2010年3月4日 18:04    回答数 / 3件

Questioner:  kn1228  このエントリーをはてなブックマークに追加 

キーワード / テキストファイル    読み込み    逆順   

ファイルをアップロードしそれを一覧表示したいと思っています。
アップロード時にテキストファイルにファイルタイトル、ファイル名を書き込み、そのテキストファイルを読み一覧表示させるところまでできるようになりました。

現在表示されている一覧を逆順に表示したいのですが、何か良い方法がございましたら教えて下さい。

●アップロード画面(index.php)
  1. <form action="upload.php" method="post" enctype="multipart/form-data">
  2. <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
  3.   タイトル<input type="text" name="title" size="50"><br>
  4.   
  5. ファイル
  6.   <input type="file" name="upfile" size="30"><br>
  7.   <br>
  8.   <input type="submit" value="アップロード">
  9. </form>

●upload.php
  1. $filepath = "failename.txt";
  2. $string = $_POST["title"]; //タイトル名
  3. $updir = "files/";
  4.  
  5.  
  6. //アップロード
  7. if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
  8. $file_type = pathinfo($_FILES['upfile']['name'], PATHINFO_EXTENSION);
  9.  
  10. $copy_file = date("Ymd-His") . "." . $file_type;
  11.  
  12. if(move_uploaded_file($_FILES["upfile"]["tmp_name"],"$updir/$copy_file")) {
  13.     chmod("files/" . $copy_file, 0644);
  14.  
  15. //ファイル名書き込み
  16. $fp = fopen($filepath, "a"); // 追加書き込みモード
  17. @fwrite($fp, $string ."\t".  $copy_file . PHP_EOL);
  18. fclose($fp);
  19.     
  20. echo $_FILES["upfile"]["name"] . "をアップロードしました。";
  21.     echo '<a href="list.php" target="blank">確認する</a>';
  22.  
  23.   } else {
  24.     echo "ファイルをアップロードできません。";
  25.   }
  26. //ファイル選択なし
  27. } else {
  28.   echo "ファイルが選択されていません。";}

●list.php
  1. $filepath = "failename.txt";
  2. $fp = fopen($filepath, "r"); // 読み取りモード
  3.  
  4. $array = file($filepath); 
  5. foreach ($array as $line) { 
  6.     list($title, $file) = explode("\t", trim($line)); 
  7.     $file = 'files/' . $file; 
  8.     if (file_exists($file)) { 
  9.         print '<a href="' . $file . '">' . $title . '</a><br />' . PHP_EOL; 
  10.         } 
  11. }
  12. fclose($fp);

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01paty_styleArrayを逆にループすれば良いのでは? こんな感じで
┣A02shimixarray_reverse()で逆順にした配列を作って、そちらを
┃┗A02-1kn1228この意見は質問者によって削除されました。
┣A03magicflute2この意見は投稿者によって削除されました。
┗A04kn12281.$inarray = file($filepath); 2.$array = array_r

回答一覧

並び替え:

A01
answererpaty_style [3月4日 18:57]

Arrayを逆にループすれば良いのでは?
こんな感じでしょうか。動作未確認です・・・すいません。

  1. for ($i=count($array)-1;$i>0;$i--) { 
  2.      list($title, $file) = explode("\t", trim($array["$i"])); 
  3.      $file = 'files/' . $file; 
  4.      if (file_exists($file)) { 
  5.          print '<a href="' . $file . '">' . $title . '</a><br />' . PHP_EOL; 
  6.      } 
  7. }

この意見に回答する

ツリーへ TOPへ

A02 満足
answerershimix [3月4日 19:07] (最終編集:3月5日 09:45)

array_reverse()で逆順にした配列を作って、そちらを使えばいいのでは?

  1. $inarray = file($filepath); 
  2. $array = array_reverse($inarray);



(追記)
「現在の逆順」じゃなくて、「ファイル名降順」でもいいですかねぇ。

  1. $inarray = file($filepath); 
  2. foreach ($inarray as $line) {
  3.     list($text, $filename) = explode("\t", trim($line));
  4.     $array[$filename] = $text; // key:ファイル名, value:ファイルタイトル
  5. }
  6. krsort($array); // key(ファイル名)降順
  7. foreach ($array as $file->$title) {
  8.     if (!file_exists('files/' . $file)) { continue; }
  9.     print '<a href="files/' . $file . '">' . $title . '</a><br />' . PHP_EOL; 
  10. }

この意見に回答する

ツリーへ TOPへ

A02-1
replyerkn1228 [3月5日 09:29]

この意見は質問者によって削除されました。

ツリーへ TOPへ

A03
answerermagicflute2 [3月4日 23:35] (最終編集:3月4日 23:40)

この意見は投稿者によって削除されました。

ツリーへ TOPへ

A04
answererkn1228 [3月5日 09:31]

1.$inarray = file($filepath); 
2.$array = array_reverse($inarray);

上記方法で逆順できました。
array_reverse関数というのも覚えました(このフォームを作るのに初めてPHPを使用しています・・・)。
ありがとうございました。

その他の方法も、ご教授頂きありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)