現在、PHPでCSVから検索するシステムをつくっています。
下記部分は、サイトから流用させていただき、検索ボックス1つの設置、値の返しまではできました。
さらに、この検索ボックスを5個~10個程度、同じページに設置して、「一括検索」をしたいと考えています。
色々なサイトを検索しましたが、「複数キーワード」で検索をするというのはヒットしますが、検索ボックスを複数設置して一括検索を行うというサイトは見あたりませんでした。
あまりにも簡単過ぎてサイトがないのか、それともPHPでできる範囲を超えてしまっているのかはわかりませんが、どなたかご教示いただければと思っています。
<?php
//POSTの処理
$id = isset($_POST['id']) ? $_POST['id'] : "false";
?>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title></title>
</head>
<body bgcolor="#FFFFFF">
<h1 style="font-size:14pt"></h1>
<?php
//ファイル名の指定
$file_name = "price.csv";
//処理の分岐
if($id != "false"){
$fp = fopen($file_name, "a+") or die('ファイルオープンエラー!');
//データを$arrayに代入(多元配列)
while(!feof($fp)){
$data = fgets($fp);
$array[] = explode(",", mb_convert_encoding($data, "UTF-8", "auto"));
}
var_dump( $array );
fclose($fp);
//目的のデータの修得
for($i=0; $i<count($array); $i++){
if (strpos($array[$i][0], $id) !== false){
$new_data = $array[$i];
//var_dump( $new_data );
}
}
}
$new_data = isset($new_data) ? $new_data : "false" ;
?>
<form action="index.php" method="POST">
<input type="text" name="id">
<input type="submit" name="Submit" vale="検 索">
</form>
<?php
if($id != "false"){
if($new_data == "false" || $id == ""){
echo "データが存在しません。";
}else{
echo '▼検索結果';
echo '<hr>';
echo '商品番号: '.$new_data[0].'<br />';
echo '名 称: '.$new_data[1].'<br />';
echo '単 価: '.$new_data[2].'<br />';
echo '在 庫: '.$new_data[3].'<br />';
}
}
?>
</body>
</html>
宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
簡単なサンプルから始めればわかりやすいと思います
<?PHP
$fp=fopen("test.csv","r");
$a=[];
while(($b = fgetcsv($fp, 1024, ",")) !== FALSE) {
$a[]=$b;
}
fclose($fp);
print_r($a);
?>
whileのなかで$bをチェックし合致したものだけ$aに投入していけば
結果として抽出後のデータが$aとして受け取れます
ありがとうございました。 早速やってみました。 検索ボックスを設置していないので、ただデータが表示されているだけの状態ですが、PHPの「$b」と「$a」にそれぞれ1.2.3とつけてみたところ、データがきちんと表示されていました。 あと金額の部分もカンマが表示されていました! これに対応する検索ボックスを設置すればいいわけですね。これから頑張ってみようと思います。
2日間ほど悩んで、最終的に初めてこちらに投稿したのですが、もっと早くに投稿してればよかったです。 ありがとうございました。
No.1
- 回答日時:
csvのボリュームにもよりますが、データが数百件~数千件程度ならphpでも実用に耐えうるかもしれません
デリミタやエンクロージャがきちんとしていて、データ内にカンマが出現しないなど
一定の条件が整えばテキストを正規表現で確認してもいいですが
csvを一度配列にしたほうが余計な処理がへるかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSVデータの行数カウントをした...
-
ログファイルが一定行数を超え...
-
自動で番号を振りたい
-
ログファイルの古い日付の行を...
-
PHP5でCSVの指定行データだけを...
-
Resource id #3 と表示されま...
-
CSVファイルの最終行のデー...
-
VC++の構造体について。
-
C言語でCSVファイルの行数を読...
-
PHPでの単語の出現回数表示
-
ヒアドキュメントの中のfor文
-
$_SESSIONに二次元配列を使える...
-
C言語の配列をPush(追加)する...
-
PHP 多次元配列変数のデータ受...
-
行列
-
mysql_fetch_arrayでレコードが...
-
$_SESSIONについて教えて下さい。
-
array_mapの再帰処理がうまく行...
-
プルダウンメニューにDBの内容...
-
配列をmb_ereg_replaceで一気に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
Resource id #3 と表示されま...
-
CSVファイルの最終行のデー...
-
複数行のデータのPOST処理に関して
-
ヒアドキュメントの中のfor文
-
バイナリファイルの内容を、そ...
-
FortranのOPEN文
-
CSVデータの行数カウントをした...
-
C言語でCSVファイルの行数を読...
-
stdClass Objectを連想配列のよ...
-
エラーメッセージ(無効な間接...
-
csvの内容を行単位で削除したい
-
【PHP】csvファイルへの書き出...
-
PHP5でCSVの指定行データだけを...
-
UTF-8のXMLがSJISのPHPで文字化け
-
doxygenを使用する環境について
-
PHPでCSVの一部の行を編集したい
-
PHP 別ドメインへのファイル保存法
-
PHPで、CSVファイルを、指定し...
-
curlをPHPで書く方法
おすすめ情報
早速のアドバイスありがとうございました。CSVデータについては、「”」や「,」など元々のデータに入っている文字と数値以外の記号は取り除きました。価格のところは本当ならば、3ケタのところに「,」をつけたいところですが、何らかの影響がでるのも嫌なので今はぐっとこらえて外してます。
データ量もいらないものを削れば1,000件~2,000件以内に収まると思います。そのあたりに問題がなければ、検索ボックスの複数設置は可能ということでしょうか。