ユニークな文字列のファイル書き込みについて

このQ&Aのポイント
  • HTMLのselectタブ内に、配列からの情報を格納したいのですが、既存のファイル内を検索して、無い場合はファイルに書き込み、あれば書き込まない方法について教えてください。
  • CSVデータを元に、特定のファイル内に文字列が存在する場合、1つだけ表示させる方法についておしえてください。
  • ファイル書き込み時に、重複したデータを避けるために何か工夫ができる方法はありますか?
回答を見る
  • ベストアンサー

ユニークな文字列のファイル書き込みについて

お世話になります。 HTMLのselectタブ内に、配列からの情報を格納したいのですが、原型となるデータは下記のようになっています。 ID category maker size  ・・・・・ A10000 ●●●  △△  12   ・・・・・ D11034 □□□  ○○  null  ・・・・・ M34567 ×××  △△  300  ・・・・・ 上記のようなCSVデータから、すでに既存のファイル内を検索して、無いような場合はファイルに書き込み、あれば書き込まない。 <select name="maker"> <?php #ID => [0] #Category => [1] #Tool name => [2] #Maker => [3] #Model => [4] #Size => [5] $file=fopen("category.dat","r"); while($select_row=fgetcsv($file,1024)){ ?> <option value="maker"><?php print($select_row[3]) ; ?></option> <?php }; fclose($file); ?> たとえばこの場合、『Maker』がダブって表示されてしまいます。これを特定のファイル内に文字列が存在する場合、1つだけ表示させには、どうすればよいでしょうか?

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

こんにちは、今日補足とお礼のメールが届いて、苦労していると知りませんでした。 もう解決されたようですが、一応コメントさせていただきます。 #1>表示されるセレクトタブの中に、Arrayがいっぱい出てきてしまいます。 >$result_unique_data = array_uniqu($arr_org_data); で $result_unique_data は、配列なので ><?php print($result_unique_data) ; ?> は、配列自体を書きだそうとしているのでそのようになります。 配列の中身を書き出す必要があります。 #1補> 一旦ファイルに書き出しているようですけど $unique_data = array_unique($data); foreach ($unique_data as $maker){ print "$maker\n"; } みたいにして配列の内容を取り出すことができます。 おわかりのように、array_unique をした結果は、添字が飛び飛びになるので、このようにした方がやりいいと思います。

golive001
質問者

お礼

遅くなってすみません。 アドバイス通りやってみました!! ソースも簡潔になり、可読性もあがりました。 ありがとうございます。 まだまだ力がいりますね。苦労します。 でも、最近は何でも出来るような(思い込み)気になってきました。 今後は、IDとPassを使った認証用のソースを書いてみたいと思います。 アドバイス本当にありがとうございました。 また何かあればよろしくお願いします。 (直近でありそうですが・・・)

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ループで直接書き出すのではなくて、 ファイルからの読み出しループでは、ハッシュに入れていくか、配列に入れておいてarray_unique して 書き出しループで書き出す。

golive001
質問者

お礼

ご返答ありがとうございます。 array_uniqueなんて便利な関数があったんですね!! びっくりです。 早速、結果配列として吐き出させてみましたが、書き出しループで失敗してしまいました。 これもなぜなのかよくわかりません?? 下記のようにコードを組んでみたのですが・・・ <html> <head><title>ユニークな文字列の表</title></head> <body> <?php $arr_org_data = file("./dat/maker_file10.dat"); $result_unique_data = array_uniqu($arr_org_data); ?> <select name="category"> <?php while($result_unique_data) { ?> <option value="category"> <?php print($result_unique_data) ; ?> </option> <?php }; fclose($arr_org_data); ?> </select> </body> </html> 何がいけないのでしょうか? 表示されるセレクトタブの中に、Arrayがいっぱい出てきてしまいます。 もう少し踏ん張ってがんばってみます(^^)V

golive001
質問者

補足

いろいろ試してみたのですが、下記のコードでうまくいきました。 <?php $arr_org_data = file("./dat/maker_file10.dat"); $result_unique_data = array_unique($arr_org_data); $arr_new_data = fopen("./dat/new_maker_file.dat","w"); for ($i=0;$i<count($result_unique_data);$i++) { if($result_unique_data[$i] ==!"") { fwrite($arr_new_data,$result_unique_data[$i]); } } fclose($arr_new_data); ?> <html> <head><title>ユニークな文字列に変換します</title></head> <body> <select name="maker"> <?php while($arr_new_data) { ?> <option name="maker"><?php print($arr_new_data) ?> </option> <?php }; ?> </select> </body> </html> 補足とお礼が逆になってしまいましたが、ありがとうございました。

関連するQ&A

  • PHPファイルとテンプレートファイルの書き方

    <?php // ファイル名 $fname = "test.csv"; // ファイルを開く $file = fopen($fname, "r"); // 全データを出力する while (list($id, $name, $add) = fgetcsv($file, 1000, ",")) { echo "<hr>"; echo "<br>ID:".$id; echo "<br>名前:".$name; echo "<br>住所:".$add; } // ファイルを閉じる fclose($file); ?> <質問> 上の内容をSmartyを使ってPHPファイルとテンプレートファイルに分離したい。 テーブルにCSVファイルのデータが入るようにしたい。 PHPファイルとテンプレートファイルの書き方を教えてください。

    • 締切済み
    • PHP
  • 日本語のデータが文字化けをしてしまいます。

    PHP初心者です。 レンタルサーバでdatファイルに書き込んでる情報をPHPファイルで出力すると、日本語の部分が文字化けしてしまいます。 datファイルから読み込んでいない日本語の部分はちゃんと表示されています。 また、datファイルにはちゃんと日本語のデータになっています。 文字コードはEUC、 PHPの出力はSJIS。 これはどういうことでしょうか? どなたか教えて下さい。 ソースは以下3ファイル構成↓ <入力するデータを集めるファイル> <html> <body> <h1 style="background:#cccccc">ゲストブック(書き込み)</h1> <form method="POST" action="guest_write.php"> お名前: <input type="text" name="name" size="20" maxlength="30" /><br /> メッセージ: <input type="text" name="message" size="70" maxlength="255" /><br /> <input type="submit" value="送信" /> </form> </body> </html> <入力したデータをdatに書き込むファイル> <?php $file=fopen("guest.dat","a"); flock($file,LOCK_EX); $line =date("Y年 m月d日 H:i:s")."\t"; $line.=$_POST['name']."\t"; $line.=$_POST['message']."\t"; fputs($file,$line."\n"); flock($file,LOCK_UN); fclose($file); header("Location: guest_input.php"); ?> <datファイルから読み込んで出力するファイル> <html> <body> <h1 style="background:#cccccc">ゲストブック(閲覧)</h1> <?php $file=fopen("guest.dat","r"); while($row=fgetcsv($file,1024,"\t")){ ?> <ol> <li>お名前:<?php print($row[1]); ?></li> <li>メッセージ:<?php print($row[2]); ?></li> <li>書き込み日時:<?php print($row[0]); ?></li> </ol> <hr /> <?php } fclose($file); ?> </body> </html> 以上ですが、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPでのフォームの受け渡しについて

    PHPの勉強中の者です。 PHPでフォームの受け取りの時に入力データのIDを受け取り、出力させるやり方について模索しています。 具体的には以下の通りです。 例えば、セレクトフォームのIDをそれぞれAAAとBBBにします。 ーーーーーーーーーー [フォーム内] <form action="file.php" method="post" name=""> <select name="data1" size="1"> <option value="0">選択する</option> <option value="100" id="AAA" >aaa</option> <option value="200" id="BBB" >bbb</option> </select></form> ーーーーーーーーーー [出力結果] AAA は aaa です。 BBB は bbb です。 ーーーーーーーーーー 選択された aaa の受け取りは、 $data1[] = $_POST['data1']; これで出来ると思いますが、idを受け取り出力する方法が分からないのです。 どなたかわかる方ご教授お願い出来ますでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • php初心者の質問fgetcsv

    いつもお世話になっております。 下記のプログラムを実行しますと、 999,test,90, 999,test,90, 999,test,90, のようになりますが、 行末の最後のカンマを取り除きたいです。 すみません。どの部分修正すればよいか、ご教授いただきたくどうぞよろしくお願い致します。 <?php $file_name="test.csv"; $id=999; $name="test"; $point=90; $array = compact("id","name","point"); $string = implode(",",$array); $file = fopen($file_name,"a+") or die("OPENエラー{$file_name}"); flock($file,LOCK_EX); fputs($file,mb_convert_encoding($string."\n",'Shift-JIS','UTF-8')); flock($file,LOCK_UN); fclose($file); $file = fopen($file_name,"r"); while ($row = fgetcsv($file,1000,",")){ echo "<hr>"; for ($i = 0 ; $i<count($row); $i++){ echo mb_convert_encoding($row[$i].",",'UTF-8','Shift-JIS'); } } fclose($file); ?>

    • ベストアンサー
    • PHP
  • csvファイルを読み込んだ時の「ゼロ」の扱い

    すみません、教えてください。 test.csv というファイルに、 佐藤, 東京 田中, 大阪 中西, 京都 というデータが入っていたとして、以下を使って読み込むと、 <?php $file_name = "test.csv"; $fp = fopen( $file_name, 'r' ); $data = array(); while( $ret_csv = fgetcsv( $fp, 256 ) ){ for($col = 0; $col < count( $ret_csv ); $col++ ){ $data[$col][$row] = $ret_csv[$col]; } $row++; } fclose( $fp ); var_dump($data); ?> 以下のように、 [0] ではなく [""] となってしまうのですが、これを [0] にする方法はないでしょうか。 array(2) { [0]=> array(3) { [""]=> string(6) "佐藤" [1]=> string(6) "田中" [2]=> string(6) "中西" } [1]=> array(3) { [""]=> string(6) "東京" [1]=> string(6) "大阪" [2]=> string(7) "京都 " } } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CSVファイル読み込み 文字化け

    アドバイスの方頂ければと思い質問しました。 os fedoracore5/php 5.2.5/mysql 5.0.27 SJISのCSVファイルを読み,UTF-8のプログラムで処理したいのですが、 文字列中に[,]を使用しているものには[""]で囲って いて、その他文字列の日本語部分は[""]で囲まれていません。 そこで下記のような形にしたのですが、日本語が化けてしまいます。 またCSVファイルの文字化けする項目を[""]で囲むと 正常に表示されます。文字列を[""]で囲まずとも文字化けしない方法、またプログラムに問題があればアドバイスを 頂ければと思います。 <?php define("TEST_FILE", "./tes.csv"); header("Content-Type: text/plain; charset=SJIS"); $fp = fopen(TEST_FILE, "r") ; while ($row = fgetcsv($fp)) { for ($j = 0; $j < count($row); $j++) { $data = mb_convert_encoding($row[$j], "UTF-8", "SJIS"); printf($data); } } fclose($fp); ?>

    • ベストアンサー
    • PHP
  • CSVファイルの文字コード変換について

    CSVファイルをアップロードし、文字コードをSJISからEUC-JPに変換したいのですが、文字化けが発生します。 ソースは以下のようになっています。 $i=0; $file = fopen($file_path,"r"); while ($data = fgetcsv($file, $file_size, ',')) { for ($j=0; $j < count($data); $j++) { $Array[$i][$j] = mb_convert_encoding($data$j], "EUC", "auto"); }$i++; } PHP5を使用しており、エクセルとテキストエディターでCSVファイルを作成してみましたが結果はどちらも同じでした。 どなたかご教授願います。

    • 締切済み
    • PHP
  • mysqlからphpに表示ですべての項目を出したい

    phpとmysqlの勉強をしているのですが、出したい項目がでてきてくれません。 今mysqlでidとnameとpriceの項目を作っているのですが、以下だとどうしてもnameしか出てきてくれません。 どうすれば3つの項目がでてくれますでしょうか? よろしくお願いします。 <?     mysql_connect('localhost' , 'root' , '') or die(mysql_error());     mysql_select_db('db1'); mysql_query('SET NAMES UTF8'); $sql="SELECT * FROM syouhin"; $res=mysql_query($sql); $options=""; while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ $options.="<input type=\"radio\" name=\"syouhin1\" value='{$row['id']}' checked>        {$row['name']}\n<br>"; } $select="{$options}</select>\n";     print $select; ?>

    • ベストアンサー
    • PHP
  • ファイル選択と同時にアップロード HTML+JS

    HTMLとJava Scriptのことを質問させてください <form>タグからファイルを選択すると同時をアップロードしたいと思っています。 複数の「ファイルを選択ボタン」を設置し、それぞれ"001.jpg"、"002.jpg"など指定の名前でアップロードしたいです。 下記のようにいくつかの<form>タグを設置し、javascriptでコントロールできるかと思いケース1のように書いた場合はうまくいったのですが、ケース2のように複数並べて記述した場合、動かなくなり困っております。 どなたか教えていただけないでしょうか? よろしくお願いいたします ケース1) <form id="upload_file1" action="file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">    <input type="hidden" name="picture_id" value="001.jpg" />    <input type="file" id="file_id_1" name="file_name" accept="image/jpeg"> </form> <form id="upload_file2" action="file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">    <input type="hidden" name="picture_id" value="002.jpg" />    <input type="file" id="file_id_2" name="file_name" accept="image/jpeg"> </form> <script> var form = document.getElementById("upload_file1"); var input = form.file_name; input.onchange = function (){ if(this.value){ form.submit(); } }; </script> ケース2) <form id="upload_file1" action="file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">    <input type="hidden" name="picture_id" value="001.jpg" />    <input type="file" id="file_id_1" name="file_name" accept="image/jpeg"> </form> <form id="upload_file2" action="file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">    <input type="hidden" name="picture_id" value="002.jpg" />    <input type="file" id="file_id_2" name="file_name" accept="image/jpeg"> </form> <script> var form = document.getElementById("upload_file1"); var input = form.file_name; input.onchange = function (){ if(this.value){ form.submit(); } }; var form = document.getElementById("upload_file2"); var input = form.file_name; input.onchange = function (){ if(this.value){ form.submit(); } }; </script>

  • リストメニューで検索できるようにしたい。

    いつもお世話になります。どうか御指導をお願い致します。 PHPとMYSQLを利用してリストメニューで検索できるようにしたいのですが。。。 下記のように、データベースの参照結果をリストメニューに反映して使用したいのですが、このままではリストメニューのselectedで選択されるデータが一番最終行になってしまいます。これを一番最初のデータ、もしくはこちらの指定するデータを選択させるにはどのようにすればよいのでしょうか? <form name="form1" method="post" action=""> <select name="select"> <?php $con = MYSQL_CONNECT("localhost","datebasename","password"); mysql_select_db("datebase00001"); $res = mysql_query("SELECT area_id, area_name FROM area"); while ($row = mysql_fetch_assoc($res)) { ?> <option value="<? $row['area_id'] ?>" selected><? echo $row['area_name'] ?></option> <? } ?> </select> </form> データベースの結果が 東京 名古屋 大阪 福岡 となった場合、このままでは、selected で表示されるのは、 福岡なってしまいます。 これを東京というようにしたいのです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう