CSVからのデータ抽出と分岐

このQ&Aのポイント
  • PHPを使用してCSVファイルからデータを抽出し、条件に応じて表示を変更したいです。
  • 条件に応じて表示内容を切り替えるためのPHPコードの動作がうまくいかず、表示が停止してしまっています。
  • 見た目や処理の流れに問題があり、修正の方法がわかりません。お力をお貸しください。
回答を見る
  • ベストアンサー

CSVからのデータ抽出と分岐

はじめまして。ある事情からPHPを書くことになり、見よう見まねで やっておりますがどうにもこうにもなりません。お助けください。 あるPHPから「data.csv」を読み込み条件毎に表示を変えたいです。 <?php $ID=$_GET["say_id"]; $Data=file("data.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[2]==$ID && $line[0]=="0"){ //この時だけ出力したいです。 //さらに if($line[1]=="1"){ //この時以下の処理をしたいです。 $say_no=str_replace("1","こんにちは",$line[1]); $say_url=str_replace("こんにちは","konnichiwa",$say_no); } elseif($line[1]=="2"){ //上記でない場合以下の処理をしたいです。 $say_no=str_replace("2","おはよう",$line[1]); $shop_url=str_replace("おはよう","ohayou",$say_no); } elseif($line[1]=="3"){ //上記でない場合以下の処理をしたいです。 $say_no=str_replace("3","こんばんは",$line[1]); $say_url=str_replace("こんばんは","konnbannwa",$say_no); } else($line[1]=="4"){////上記でない場合以下の処理をしたいです。 $say_no=str_replace("4","さようなら",$line[1]); $say_url=str_replace("さようなら","sayounara",$say_no); } break; } } ?> if($line[1]=="1"){   ここで処理が止まってしまっているのか画面に何も出なくなります。 見た目もよろしくないような気がします・・。恐れ入りますがお力お貸しください。

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

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

  • ベストアンサー
  • funaho
  • ベストアンサー率58% (43/74)
回答No.1

改行コードが原因です。 改行コードを「\r\n」で書きました。対応する改行コードにしてください。 <?php $ID=$_GET["say_id"]; $Data=file("data.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if(str_replace("\r\n", "", $line[2])==$ID && $line[0]==0){ //この時だけ出力したいです。 //さらに if($line[1]=="1"){ //この時以下の処理をしたいです。 $say_no=str_replace("1","こんにちは",$line[1]); $say_url=str_replace("こんにちは","konnichiwa",$say_no); } elseif($line[1]=="2"){ //上記でない場合以下の処理をしたいです。 $say_no=str_replace("2","おはよう",$line[1]); $shop_url=str_replace("おはよう","ohayou",$say_no); } elseif($line[1]=="3"){ //上記でない場合以下の処理をしたいです。 $say_no=str_replace("3","こんばんは",$line[1]); $say_url=str_replace("こんばんは","konnbannwa",$say_no); } elseif($line[1]=="4"){ //上記でない場合以下の処理をしたいです。 $say_no=str_replace("4","さようなら",$line[1]); $say_url=str_replace("さようなら","sayounara",$say_no); } break; } } ?>

seaweed5000
質問者

お礼

ありがとうございました。 何とか解決いたしました。

関連するQ&A

  • CSVデータの行数カウント

    PHP初心者です。 アドバイスよろしくお願いします。 CSVデータ 20060802:1,AAA,少し 20060802:2,AAA,少し 20060802:3,AAA,少し 20060802:4,BBB,大きい 20060802:5,AAA,小さい 20060802:6,AAA,小さい 20060802:7,AAA,小さい があるとき、 そのCSVデータを読み込んで データの3列目を基準としてデータがいくつあるかを数えたい。 例えば 少し・・・・3 大きい・・・・1 小さい・・・・1 というふうに数えたい。 $filename = CSVデータファイル; $fp = fopen("$filename", "r"); if($fp == false){ exit; } else { for$i = 0; $i < sizeof($fp); $i++){ $line = explode(",", $fp[$i]); // ここで // $i[2]==AAA // のとき、AAAの行数をカウントする処理をしたい。 } }

    • ベストアンサー
    • PHP
  • CSVデータの一部を変換したい

    for( $i = 0; $i < sizeof( $Data ); $i++ ) { $CSV = ereg_replace( "[\r\n]", "", join( ",", $Data[ $i ] ) ). "\n"; とデータをCSVに書き込み、 abcd,2009,04,30,あいうえお efgh,2009,06,15,かきくけこ ・・・ xyz,2009,07,09,らりるれろ となっています。このCSVの日付部分だけを、コンマ区切りでなくハイフンで結び、 abcd,2009-04-30,あいうえお efgh,2009-06-15,かきくけこ ・・・ xyz,2009-07-09,らりるれろ としたいのですが、どのようにすれば宜しいでしょうか?

    • ベストアンサー
    • PHP
  • CSVファイルから検索出力してページ毎に別けたい

    宜しくお願いします。 下記URLを参考にアイテム別ページを作成したのですが データ量が多い為クエリを利用して10件毎にページを分けたいのですが やり方が思い浮かびませんどのように記述すれば出来ますでしょうか http://affiliate.aki-f.com/prog/page/33.html <?php require_once('common.php'); $Cid=$_GET['cid']; $Data=file('cat.csv'); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[0]==$Cid){ $CatTitle=$line[1]; } } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title><?=$CatTitle?> | サンプルリンク集</title> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <body> <a href="index.php">HOME</a> <h1><?=$CatTitle?></h1> <table border="1"> <tbody valign="top"> <?php $Data=file('item.csv'); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[1]==$Cid){ $ImageLink=DeleteEsc($line[2]); $TextLink =DeleteEsc($line[3]); ?> <tr> <td><?=$ImageLink?></td> <td> <?=$TextLink?><br><br> <a href="item.php?id=<?=$line[0]?>">詳細を見る</a> </td> </tr> <?php } } ?> </tbody> </table> </body> </html> item.csvファイルの中身は あいうえお,abc かきくけこ,efg さしすせそ,hij たちつてと,lmn 以下省略

    • ベストアンサー
    • PHP
  • csvの内容を行単位で削除したい

    getでidを渡し(id.php)、受け取った別のphp(sakujyo.php)ファイルで そのidが含まれているリンクをクリック後 削除したいのですが 削除の方法がどのサイトをみても 私の理解力不足+知識不足で理解ができませんでした。 ロジックは一旦すべてのファイルを読み込んで 特定の行を削除後、再度上書きという流れは わかったのですが、それをプログラムに書き直すと どうしてもその通りできませんでした。 ==csvの内容== [id1],[ふりがな1],[なまえ1],[tel1] [id2],[ふりがな2],[なまえ2],[tel2] [id3],[ふりがな3],[なまえ3],[tel3] <id.phpのソース> <?PHP $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { list($id, $furigana, $name, $tel) = $data; echo "<a href=\"sakujyo.php?$id\">$id</a><p>"; } ?> <sakujyo.phpのソース> <?PHP $id_url = $_GET['id']; $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { list($id, $furigana, $name, $tel) = $data; //ここから下がどうすればいいの悩んでいます。 if($id_url = $id){ $id = ""; $furigana = ""; $name = ""; $tel = ""; } $fp = fopen("data.csv","a"); fwrite($fp, "$id, $furigana, $name, $tel\n"); } ?> sakujyo.phpの if($id_url = $id){ から下は変数を空にしているだけで 結果は行の削除ではなく,,,,を書き込んでいると思うのですが それ以外に方法が思いつきませんでした。 このCSVファイルの行単位の削除方法をご存知の方がいらっしゃいましたら大変恐縮ですがご指導を頂戴できませんでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • csvのデータをphpで表示する方法を教えてください。

    csvの中の特定の文字をphpで検索する方法を教えてください。 僕がためしたのは以下です。 ------------------------------------------------------------- <? $PTR = fopen( "./test.csv", "r" ); if( $PTR == FALSE ){ die( "file open error!!" ); } $Key = $_GET["val"] ; $Size = strlen( $Key ); while($Str = fgets( $PTR, 1024 ) ) { $Code = substr( $Str, 0, $Size ); if( $Code === $Key ) { echo $Str; break; } if( $Key <= $Code ){ break; } } fclose( $PTR ); ?> ------------------------------------------------------------- ですが、これだと頭の文字がマッチしなとヒットしないんです。 たとへばcsvに以下が入ってるとします。 あきら いちご えなり この[あきら]をヒットしたい場合、getで渡す文字を[あきら]や[あ]ならヒットします。これを[き]や[ら]だけの文字検索でも[あきら]と表示されるようにしたいのです。 最悪php自体全部変えてもいいので、誰か教えてください。 条件として携帯電話からも検索できるものに限ります。 ※機種依存はX

    • 締切済み
    • PHP
  • PHPとCSVで簡易データベースなるものを作りたいのです

    私はプログラミングなどに関しては全くの素人なのですが、 今回こちらのサイト様(http://affiliate.aki-f.com/prog/cat/cat9.html)を参考にして簡易データベースなるものを作ろうと思っています。 ですがやはり付け焼刃の知識ではどうにも先が見えなく困っています。 今回が初投稿なのですが何卒宜しくお願いいたします。 以下に各ソースと質問を書かせていただきます。 ------------------------CSVの中身------------------------ 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 ~同じ用に数十件ほど~ 商品カテゴリー,商品タイトル,値段,発売年,簡単な説明,おすすめ度 ------------------------------------------------------------- 同じカテゴリー、発売年、おすすめ度などで絞込み表示するような形を想定しています。 ------------------------------INDEX.PHP------------------------ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"></head> <body> <table> <tbody> <?php $Data=file('list.csv'); for($i=1;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]) ?> <tr> <td><a href="test.php?id=<?=$line[0]?>"><?=$line[0]?></a></td> <td><a href="test.php?id=<?=$line[1]?>"><?=$line[1]?></a></td> <td><a href="test.php?id=<?=$line[2]?>"><?=$line[2]?></a></td> <td><a href="test.php?id=<?=$line[3]?>"><?=$line[3]?></a></td> <td><a href="test.php?id=<?=$line[4]?>"><?=$line[4]?></a></td> <td><a href="test.php?id=<?=$line[5]?>"><?=$line[5]?></a></td> </tr> <?php } ?> </tbody></table></body></html> ---------------------------------------------------------------- index.phpでは全商品のリストが表示されます。 ---------------------------test.php----------------------------- <?php $id=$_GET['id'] ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head><meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"></head> <body> <table> <tbody> <?php $Data=file('list.csv'); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if($line[/*質問1*/]==$id){ ?> <tr> <td><a href="test.php?id=<?=$line[0]?>"><?=$line[0]?></a></td> <td><a href="test.php?id=<?=$line[1]?>"><?=$line[1]?></a></td> <td><a href="test.php?id=<?=$line[2]?>"><?=$line[2]?></a></td> <td><a href="test.php?id=<?=$line[3]?>"><?=$line[3]?></a></td> <td><a href="test.php?id=<?=$line[4]?>"><?=$line[4]?></a></td> <td><a href="test.php?id=<?=$line[5]?>"><?=$line[5]?></a></td> </tr> <?php } } ?> </tbody></table></body></html> --------------------------------------------------------------- index.phpで選択された項目で絞り込んで表示するページです。 質問1 上記の、if($line[~]==$id)の、~の部分に例えば0と入っているなら商品カテゴリーを選択した時に同じカテゴリーで絞り込み表示するわけなのですが、これだけでは当然他の項目を選択しても何も表示されません。なので、~の部分に全ての$lineを巡回させるような命令を書ければ全項目での絞り込みに対応できるんじゃないかなと、素人ながらに思っているのですがどうでしょうか?またその方法、もしくは他の解決策をご教授願えますでしょうかm(_ _)m あと、index.phpとtest.phpを1つにまとめてしまえることはできるでしょうか?私としてはできるならそうしたいのです。が、うまくできませんでした。 どこか変なことを口走っているかも知れませんがご容赦ください。 宜しくお願いします。

    • 締切済み
    • PHP
  • CSVの操作方法について

    CSVの操作方法について 以下のようなソースでcsvからデータを配列に格納しています。 わからない事が2点あるのですがどのようにすれば可能でしょうか? ※csvの例 No,name,age 1,あああ,25 2,いいい,28 3,ううう,33 1:csvのカラム名を「No」とした場合ここに数字を入れます。IDみたいなもんです。 この数字の番号だけの情報を取得するにはどうすればいいでしょうか? 2:上記同様に「No」の1~5までといったような指定した番号の情報だけを取得するには どうすればいいでしょうか? // 読み込み開始行 $start = 1; // 初期化 $row = array(); // 読込み行数 $h = 0; $filename = APP_DIR . '/csv/' . $filename; $handle = fopen($filename, 'r'); while (($data = self::fgetcsv_reg($handle)) !== false) { $_enc_to = mb_internal_encoding(); $_enc_from = 'sjis'; mb_convert_variables($_enc_to, $_enc_from, $data); if ($h >= $start) { for ($i = 0; $i < count($data); $i++) { $row[$h - 1][$i] = $data[$i]; } } $h++; } fclose($handle);

    • ベストアンサー
    • PHP
  • PHPでCSVファイルの任意の行だけを編集したい

    簡易掲示板の管理画面を作成しようと思っていますが、 うまくいかずに悩んでいます。 入力フォームで送られてきた内容をcsvファイルに書き込み、 それを表示するという掲示板なのですが、 管理画面ではそのcsvファイルを操作して、 任意の書き込みを修正・削除できるようにしたいと考えています。 以下、PHPコードです。 if($mode == "edit"){ foreach($csv as $val){ list($li_no, $li_date, $li_comment) = split("\t",$val); if($li_no == $info_no){ $csv[$info_no] = "$id\t$date_y/$date_m/$date_d\t$comment\t\n"; fputs($fp,$csv[$info_no]); fclose($fp); } } }else{ $dat = "$id\t$date_y/$date_m/$date_d\t$comment\t\n"; $fp = fopen('$csv' , 'w'); fputs ($fp, $dat); for ($i=0; $i<1000;$i++){ fputs ( $fp,$csv[$i]); } fclose($fp); } 編集用のフォームで$info_noを飛ばして、 CSVファイル内の$li_noと一致した場合、 $li_noの行を書き換えという処理をしているつもりなのですが、 なぜか、他の行がすべて消えて、 編集した行だけがファイル内に残ります。 いろいろと検索して試してはみたのですが、 どうもうまくいきません。 どなたか教えてください。 お願いします。 これ以外の方法で簡単にできる方法があれば そちらも教えていただけたら幸いです。

    • ベストアンサー
    • PHP
  • CSVからの抽出、並び替えのプログラム

    すいません。phpを勉強し始めたばかりで、CSVから抽出したものを並び替えたいと考えていまして、 サンプルプログラムをいくつか見ていたのですが一部よく分からない所があります。 例えば以下のプログラムで $names = Array(); と$names[] = $lines[0]; はどのような処理をしているのでしょうか? ただ単にCSVから読み込み→配列を全部表示では上記の処理は見当たりません。 斉藤一郎,170,60,A 鈴木二郎,180,90,B 田中三郎,190,80,O 中村四郎,160,100,AB <?php if( $handle = fopen( 'test.csv', 'r' ) ){ $names = Array(); // while( ( $lines = fgetcsv( $handle ) ) !== FALSE ){ if( $lines[2] >= 90 ){ //体重が90以上なら $names[] = $lines[0]; // } } echo '体重が90kg以上なのは、' . implode( '・', $names ) . 'です'; } ?>

    • ベストアンサー
    • PHP
  • CSVファイルを更新する処理

    CSVに追加や削除、一覧表示、更新をする処理を書いたのですが 更新処理だけうまくいかずに躓いています。 readメソッドのreturn $files;のところで下記の syntax error, unexpected '$files' (T_VARIABLE)というエラーが出てしまいます。 なぜエラーが出ているか教えていただけるとありがたいです。 <?PHP function con($hantei, $num, $name, $age, $address){ $data = [ $num, $name, $age, $address ]; $datas = [$data]; // 追加 if($hantei === 'add'){ $fp = fopen('data.csv', 'a'); foreach($datas as $data) { $line = implode(',' , $data); fwrite($fp, $line . "\n"); } fclose($fp); //更新 } elseif ($hantei === 'update') { function read() { $FILENAME = 'data.csv'; $file = fopen($FILENAME, 'r'); while($data = fgetcsv($file)) { $files[] = $data; }   fclose($file);   return $files; } function replace($num, $name, $age, $address) { // read() $files = read(); $arr = array(); foreach($files as $key => $el) { // [0][a, b, c, d] // [1][a, b, c, d] if ($el[0] == $num) { // $arr[0][0] = $num ... $arr[$key] = array($num, $name, $age, $address); } else { $arr[$key] = array($el[0], $el[1], $el[2], $el[3]); } }    return $arr; } replace(); function write($arr){   $FILENAME = 'data.csv'; $file = fopen($FILENAME, 'w');   foreach ($arr as $v) {    fputcsv($file,$v); }    fclose($file); } $arr = replace($num, $name, $age, $address); write($arr); //削除 } elseif ($hantei === 'dalete') { $file = file('data.csv'); unset($file[$num]); file_put_contents('data.csv', $file); //一覧表示 } elseif ($hantei === 'list') { $fp = fopen('data.csv', 'r'); $readed = fread($fp, filesize('data.csv')); print_r($readed); fclose($fp); } } con('update', 1, 'name', 3, 'address');

    • 締切済み
    • PHP

専門家に質問してみよう