PHPによるCSVファイルの指定列検索方法とは?

このQ&Aのポイント
  • PHPによるCSVファイル内の指定列内を検索する方法について困っています。
  • CSVファイルの登録情報は1,りんご,あり 2,なし,あり 3,ぶどう,なし 4,メロン,なし 5,スイカ,なし としています。
  • PHP上で指定列のみを検索する場合、どこを変更すれば良いのか教えてください。
回答を見る
  • ベストアンサー

PHPによるCSVファイルの指定列検索について

いつも参考にさせていただいております。今回はじめての質問になりますが、よろしくお願いします。 PHPによるCSVファイル内の指定列内を検索する方法について困っております。似たような質問(http://oshiete1.goo.ne.jp/qa3570985.html)を参照しましたが、どうにもわからずほとほと困っている状態です。 とりあえず他サイトを参考にして検索フォームを下記のように作成しました。(ラジオボタンの送信内容は便宜上変更しました) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT-JIS"> <title></title> </head> <body> <form action="search_4.php" method="POST"> <INPUT type="radio" name="touroku_type" value="りんご">りんご <INPUT type="radio" name="touroku_type" value="なし">なし <INPUT type="radio" name="touroku_type" value="ぶどう">ぶどう <INPUT type="radio" name="touroku_type" value="メロン">メロン <INPUT type="radio" name="touroku_type" value="スイカ">スイカ<BR> <input type="submit" name="submit" value="検索"> </form> <!--ここから検索結果--> <ul> <?php if($_POST["touroku_type"]!=""){   $KeyWord=$_POST["touroku_type"];   $KeyWord=htmlspecialchars($KeyWord);   $Data=file("system.csv");   for($i=0;$i<sizeof($Data);$i++){     $lines=strip_tags($Data[$i]);     if(mb_eregi($KeyWord,$lines)){       $line=explode(",",$Data[$i]); ?> <li><?=$line[3]?> → <a href="item.php?id=<?=$line[0]?>">詳細を見る</a></li> <?php     }   } } ?> </ul> </body> </html> CSVファイルの登録情報は 1,りんご,あり 2,なし,あり 3,ぶどう,なし 4,メロン,なし 5,スイカ,なし とします。 この場合、”りんご”や”スイカ”など他で入力されていない情報で検索した場合きちんと出ますが、”なし”で検索すると2から5の情報が出てしまい検索として役に立たない状態です。 ここで質問なのですが、PHP上で指定列のみを検索する場合(上記の場合、配列の2つ目のみを検索対象とする)、上記プログラムのどこを変更すべきなのかご教授いただけますでしょうか? よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • explode
  • ベストアンサー率100% (6/6)
回答No.1

こんにちは。 はじめまして。 ソースを拝見しました。 「なし」で検索をするとCSVの3列目の「あり・なし」も 引っかかってしまってますね。 ということは2列目のみ検索させなければならないので、 先に explode で各列に分割し、2列目のみを検索対象にします。 こんな感じです。 <!--ここから検索結果--> <ul> <?php if($_POST["touroku_type"]!=""){ $KeyWord=$_POST["touroku_type"]; $KeyWord=htmlspecialchars($KeyWord); $Data=file("system.csv"); print_a($Data); for($i=0;$i<sizeof($Data);$i++){ $lines=strip_tags($Data[$i]); $line=explode(",",$Data[$i]); if(mb_eregi($KeyWord,$line[1])){ ?> <li><?=$line[1]?> → <a href="item.php?id=<?=$line[0]?>">詳細を見る</a></li> <?php } } } ?> </ul> いかがでしょうか。

nyamaa
質問者

お礼

explode様 回答ありがとうございました。 指示通りに書き換えて実行したところ、見事指定列のみを検索対象とすることができるようになりました。ここで2週間ほど躓いていたので感動の極みです。 しかし、少し変えただけで動くようになるなんて勉強不足としか言いようがないですね。お恥ずかしい。CSVに関する参考書自体なかなか本屋に置いていない事が多いので情報源がネットに偏りすぎて応用が利かないのはまずいですね。もっと勉強します。 アドバイスありがとうございました。

関連するQ&A

  • PHPでの検索

    初心者です。 ネットもさがしてみたのですが下記の意味がイマイアチわかりません。 <form name="form2" action="search.php" method="post"> <input type="text" name="keyword" size="25" value="<?= $keyword ?>"> <input type="submit" name="search" value="検索"><br /> <input type="radio" checked name="searchSelect" value="AND">AND  <input type="radio" <?= ($searchSelect == "OR")? "checked" : "" ?> name="searchSelect" value="OR">OR </form> (1)<form name="form2" action="search.php" method="post"> 検索ボタンを押すと「action="search.php"」が起動します。  どういう仕組みなのでしょうか。 (2) <input type="text" name="keyword" size="25" value="<?= $keyword ?>">  作者の説明で、  『前の画面でテキストボックスに入力した値を、デフォルトで表示しています。  <input type="text" name="keyword" size="25" value="<?= $keyword ?>">』  となっていますが、value="<?= $keyword ?>"でなぜそうなるのでしょうか。  また、<?= $keyword ?>の<?= ?>構文はどのような機能があるのでしょうか。 (3)<input type="radio" checked name="searchSelect" value="AND">AND  「value="AND">AND」の右側の「AND]はどういう意味でしょうか。 (4)<input type="radio" <?= ($searchSelect == "OR")? "checked" : "" ?> name="searchSelect" value="OR">OR  作者の説明で、  『(6)前の画面でORラジオボタンが選択されていた場合は、選択(checked)します。  <input type="radio" <?= ($searchSelect == "OR")? "checked" : "" ?> name="searchSelect"  value="OR">OR』  とありますが、<?= ($searchSelect == "OR")? "checked" : "" ?>でなぜそういうことができているのでしょうか。  また、『"checked" : 』の『:』は何の役目をしているのでしょうか。 上記4つの質問でどれでもいいですのでどなたかお教え願えないでしょうか。

    • 締切済み
    • PHP
  • PHPでTEXTと同様なcheckBoxの処理

    下記のフォームから検索キーワードを入力してANDとORの検索はちゃんとできていますが、 チェックボックスを使いテキストフォームと同様のロジックで「りんご■メロン」と 文字と文字の間にスペース「■」で結合して送信し、PHPコード側で受けとるにはどうしたらよいかアドバイス下さい。 ちなみに、PHPコード側では$_REQUEST['word']に<input type=text name=word size=35 value="">と同じような処理を入れたいです。 (1)検索キーワード --------------------------------------- りんご■メロン *■は半角スペース文字とします。 HTMLフォーム --------------------------------------- <form action="test.php" action="POST"> <input type=hidden name=mode value="search"> 検索キーワード:<input type=text name=word size=35 value=""> <select name=option> <option value="and"> AND</option> <option value="or"> OR</option> </select> <input type=submit value="Search"> </form> ↓この処理では全然だめでした。 <form action="test.php" method="post"> <input type="checkbox" name="word[]" value="りんご"> <input type="checkbox" name="word[]" value="メロン"> <input type=submit value="Search"> </form> PHPコード foreach($_REQUEST['word'] as $val){ $_REQUEST['word'] = " "."$val"; }

    • 締切済み
    • PHP
  • チェックボックス/ラジオボタン

    CGIを勉強中です。 まだ無料で配布されているCGIをカスタムするくらいしかできないレベルです。 今度やりたいのが、チェックボックス/ラジオボタンどじらでもいいのですが、 こちらに送られてくるメールフォームで選択されているものは仮に「Y」 選択されていないものは「N」という形で受け取りたい場合はどのように したらできるのでしょうか? よろしくお願いします。 <input type="checkbox" name="みかん" value="みかん" />みかん <input type="checkbox" name="りんご" value="りんご" />りんご <input type="checkbox" name="メロン" value="メロン" />メロン <input type="radio" name="みかん" value="みかん">みかん  <input type="radio" name="りんご" value="りんご">りんご

    • ベストアンサー
    • CGI
  • PHPとJSで同じNAME属性を使いたい場合の配列処理の記述

    さきほどのNO.1508009(チェックに応じて違うチェックボックスをアクティブにしたい)の件で、 HTMLファイルへのチェックボックス配置目的がPHPによる検索フォームとして利用することですが、 PHP側でSQLを発行するための配列の参照先にもなってしまっているため、実際のHTMLソースでは <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit" value="バナナ">[d] バナナ でなく、 <INPUT TYPE="CHECKBOX" NAME="fruit[]" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit[]" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit[]" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit[]" value="バナナ">[d] バナナ とかかれています(NAME属性内に[])。なのでjchさんにご提示いただいた function check() { var v = document.kkk.food[0].checked; for(var i=0; i<3; i++){ if(v) { document.kkk.fruit[i].disabled = false } else { document.kkk.fruit[i].disabled= true; } } document.kkk.fruit[3].disabled= true; } を使わせてもらおうとすると不整合を起こしてしまいます。 かといって、安直に以下のようにかくと構文エラーになってしまいます。 document.kkk.fruit[][i].disabled = false ここでPHP側が使いたい配列表現を活かしつつ、jchさんのスクリプトも使いたい場合に 何かうまい書き方はありますでしょうか? よろしくお願い致します。

  • PHPのサイト内検索の結果をCSVに書き出すには

    Webサイトのサイト内検索が、どれくらい使用されているか調べるため、 検索結果をCSVで書き出したいと考えております。 php初心者のため、苦戦しております。 詳しい方がいらっしゃいましたら、ご教示ください。 サイトはCodeIgniter(コードイグナイター)を使用しており、PHP5.3.3です。 サイト内検索の仕組みは、form actionを使用しており、 htmlに記載のコードは以下です。 ------------------------------------------------------------------------------------------------------- <form action="search.php" method="get" data-form-id="keyword_webcode-search"> <input name="keyword_webcode" type="text" value="" rel="キーワード検索出来ます。"><br> <input type="submit" value="データを送信"> </form> ------------------------------------------------------------------------------------------------------ データ送信先のsearch.phpに書き出すためのコードを追加しておりますが、 何も起こりません。 コードを追加するファイルが間違っているのでしょうか? 追加したコードは以下です。 ------------------------------------------------------------------------------------------------------- $csv = fopen('file.csv', 'a'); fputcsv($csv, $ShiftJIS); fclose($csv); ------------------------------------------------------------------------------------------------------- 色々試してみましたが、うまく行かず行き詰まっています。 どなたかアドバイスいただければと思います。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHPで日付の範囲検索

    PHPを使って日付の範囲検索を実装しています。日付をセレクトフォームで選択し、該当する日時をSELECT文で記述するという流れです。イメージは以下のような感じですが、大体合っていますか? <? php if (!empty(filter_input(INPUT_POST, 'day'))) { $day = filter_input(INPUT_POST, 'day'); ・・・・ SELECT 文   ・・・・ ?> <html> <div class="search"> <form method="post"> <select name="year"> <?php for ($i=2000; $i <= 2021; $i++) { $year .= '<option value="'.$i.'">'.$i.'年</option>'; } ?> </select> <select name="month"> <?php for ($i=1; $i <= 12; $i++) { $month .= '<option value="'.$i.'">'.$i.'月</option>'; } ?> </select> <select name="day"> <?php for ($i=1; $i <= 31; $i++) { $day .= '<option value="'.$i.'">'.$i.'日</option>'; } ?> </select> <input type="hidden" name="search" value="<?php echo $_POST['year'].'-'. $_POST['month'].'-'. $_POST['date']; ?>"> <input type="submit" value="検索"> </form> </div> </html>

    • ベストアンサー
    • PHP
  • PHP 配列の並べ替え

    phpでの配列操作に関して質問です。 配列 $fruit[]の中に [0]→{[name]りんご,[value]5} [1]→{[name]みかん,[value]6} [2]→{[name]メロン,[value]0} [3]→{[name]いちご,[value]1} [4]→{[name]ぶどう,[value]5} このようなデータが入っていたとして、 [value]の大きい順に並べ替えをしたいのですが、 どのような方法を行えば良いのでしょうか? 多分とても基礎的な問題だと思うのですが、 どうしても良い方法が思いつかないので、 どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP
  • 二つのPHPファイルを上手く一つにしたいのですが

    ラジオボタンABCDを選択して上のNEXTボタンを押したとき、回答をSESSIONの配列に蓄えつつ次の問題へ進みたいのですがなかなか上手くいきません。 助けて頂けると嬉しいです。 ちなみに上のtest.phpでは問題を進んだり戻ったりの表示ができ、下のsession.phpではSESSION配列にクリックした分の回答を格納することができます。 //test.php <?php session_start(); ?> <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <p>&nbsp;</p> <p> <?php $max=$_POST["next"]; if($max==null){ $max=1; }else{ $max++; } ?> </p> <p>&nbsp; </p> <form method="post" action="test.php"> <input TYPE="radio" NAME="name2" VALUE="1" CHECKED>ア <input TYPE="radio" NAME="name2" VALUE="2">イ <input TYPE="radio" NAME="name2" VALUE="3" CHECKED>ウ <input TYPE="radio" NAME="name2" VALUE="4">エ <input type="submit" name="max_1" value="Next"> <input type="button" value="最初から" onClick="location.href='test.php'"> <input type="button" value="Back" onClick="history.back()"> <input type="hidden" name="next" value="<?php print $max?>"> </form> <TEXTAREA readonly cols="100" rows="20" name="e"> <? mb_language("uni"); mb_internal_encoding("utf-8"); //内部文字コードを変更 mb_http_input("auto"); mb_http_output("utf-8"); $db=mysql_connect("localhost","接続ID","パスワード"); mysql_query("SET NAMES utf8",$db); //クエリの文字コードを設定 mysql_select_db("データベース名"); //データベースに接続 if (!$con = mysql_connect("localhost", "接続ID", "パスワード")) { echo "接続失敗" ;   exit ; } //データベースを選択 if (!mysql_select_db("データベース名", $con)) { echo "データベース選択失敗" ;   exit ; } $sikenbango=111; $mondaibango=$max; if (!$res = mysql_query("SELECT * FROM `MONDAI` WHERE SIKENBANGO='$sikenbango' AND MONDAIBANGO='$mondaibango'",$con)) { echo "SQL失敗<BR>" ;   exit ; } //検索した結果を全部表示 while ($row = mysql_fetch_array($res)) { echo $row["mondai"]; echo $row["kaito"]; echo "<BR>" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </textarea> //session.php <?php session_start(); ?> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <?php if (!isset($_SESSION['answer'])) { $_SESSION['answer'] = array(); } if (isset($_POST['submit'])) {//クリックしたとき $qno = intval($_POST['qno']);//整数が入る if (($qno >= 1)and($qno <=80)) { $_SESSION['answer'][$qno] = $_POST['answer']; // セッションに追加 // データベースへも保存したければここに記述 } } else { $qno = 0; } if ($qno == 80) { print "<pre>"; print_r($_SESSION); print "</pre>"; } else { $qno++; print '<form action="session.php" method="post">' . PHP_EOL; print '<input type="hidden" name="qno" value="' . $qno . '" />' ; print '<input TYPE="radio" NAME="answer" VALUE="1" CHECKED>A'; print '<input TYPE="radio" NAME="answer" VALUE="2">B'; print '<input TYPE="radio" NAME="answer" VALUE="3" CHECKED>C'; print '<input TYPE="radio" NAME="answer" VALUE="4">D'; } print '<input type="submit" name="submit" value="NEXT">' . PHP_EOL; print '</form>' . PHP_EOL; print "<hr />"; print "<pre>"; print_r($_SESSION); print "</pre>"; ?>

    • 締切済み
    • PHP
  • 検索にチェックボックス・ラジオボタンを追加する

    こちらでページの分割について質問させていただいたものです。 http://okwave.jp/qa/q6585344.html ベストアンサーに選ばせていただいたコードを元に、 チェックボックス検索・ラジオボタン検索を追加するにはどのようにすればよいのでしょうか。 【htmlのフォーム部分】 <form method="post" action="sample.php"> <input type="text" name="keyword" value="<?php echo $keyword ?>"/> <input type="hidden" name="s" value="0" /> <input type="checkbox" name="search1[]" value="AA">AA<br> <input type="checkbox" name="search1[]" value="BB">BB<br> <input type="checkbox" name="search1[]" value="CC">CC<br> <input type="checkbox" name="search1[]" value="DD">DD<br> <input type="radio" name="search2" value=" ORDER BY id DESC" checked>登録順 <input type="radio" name="search2" value=" ORDER BY age DESC">年齢順 <input type="submit" /> 誠に勝手ながら、急ぎ必要となった知識で、初心者の為丸投げのような質問になり、申し訳ございません。 また、本は片手にあるのですが、用語の理解が不十分なためコード付きにてご回答いただけると嬉しいです。 また、

    • ベストアンサー
    • PHP
  • 検索結果をサイズ指定した新規ウインドウで表示する

    はじめまして。ATRYといいます。よろしくお願いします。 [search.html]でキーワードをformで入力してもらい、[result.php]で検索、結果を表示させています。 現在は、 --------------[search.html]--------------- (略) <FORM action="result.php" method="post" target="_blank"> キーワード: <INPUT type="text" name="keyword"> <INPUT type="submit" value="GO"> </FORM> (略) ------------------------------------------ のように、ターゲット指定で新規ウインドウを立てていますが、今度はサイズ指定をしたウインドウを立てたいと思います。 JavaScriptでwindow.open()を使うことはわかるのですが、いい方法が浮かびません。たとえば、 --------------[example.html]---------------- (略) <FORM> キーワード: <INPUT type="text" name="keyword"> <INPUT type="button" value="GO" onClick="javascript:window.open('result.php','','width=300,height=500')"> </FORM> (略) -------------------------------------------- としても新規ウインドウは開かず、思う結果にはなりません。何か大きなところを見逃してるような気がするのですが、解決できないでいるので、アドバイスをよろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう