CSVからの抽出、並び替えのプログラム

このQ&Aのポイント
  • 初心者がCSVからデータを抽出し並び替えるためのプログラムを解説します。
  • 体重が90kg以上の人の名前を抽出する処理を説明します。
  • サンプルプログラムで使用されている配列の操作についても解説します。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • kuzumiHK
  • ベストアンサー率72% (132/183)
回答No.1

<?php if( $handle = fopen( 'test.csv', 'r' ) ){ $names = Array(); // 空の配列namesを作成 while( ( $lines = fgetcsv( $handle ) ) !== FALSE ){ if( $lines[2] >= 90 ){ //体重が90以上なら $names[] = $lines[0]; // 配列namesに追加 } } //結果、体重が90以上の2人がnamesに格納されました echo $names[0]; // 鈴木二郎 echo $names[1]; // 中村四郎 } ?>

関連するQ&A

  • array をつかってcsv ファイルを作る

    もとになるcsvファイルから、いらない行を削除して新しいcsvファイルを作りたいです。 そこで、このようにしてみました。 $fptemp = fopen('data-temp.csv', "a+"); if (($handle = fopen('data.csv', "r")) !== FALSE) { while (($data= fgetcsv($handle)) !== FALSE) { if(条件){ $list = array($data); fputcsv($fptemp, $list); } } } fclose($handle); fclose($fptemp); ところが、結果の行にはすべてArray とだけ出力されます。 もとの行をそのまま出すにはどうしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • phpでcsvデータをランダム表示について

    下記はcsvデータをランダムに1つだけ抽出するphpのプログラムですが、1度表示したデータに色をつけるとか、表示させない方法はありますか? <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> </head> <body> <?php // 抽出数 $count = 1; $list = array(); // 読み込みCSVファイル $lines = file('test.csv'); shuffle($lines); foreach ($lines as $line) { if ( ! in_array($line, $list)) { array_push($list, $line); if (count($list) >= $count) { break; } } } // CSVファイルに出力 $file = fopen('test2.csv', 'w'); foreach ($list as $l) { echo $l.'<br>'; if ($file) { fputs($file, $l); } } fclose($file); ?> </body> </html>

    • ベストアンサー
    • PHP
  • CSVファイルを読み込み表示すると行頭がおかしくなります

    ・CSVファイルを読み込み表示すると行頭がおかしくなります。 -【 CSVファイル(test.csv) 】------------------- 1,単一,必須 2,…,… ----------------------------------------- ・例えば上記のCSVを読み込んで、  PHPで表示すると以下のように表示されます。 -【 ブラウザ表示 】-------------------------- 1 P一 K須 2 … ----------------------------------------- ・というように最初の文字が正常に表示されません。 ・ちなみに数字(半角?)はちゃんと表示されました。 ・プログラムは下のような感じになります。 ・どこを編集すればよいでしょうか? -【 PHP 】--------------------------------- <?php  if( $fp = fopen( 'test.csv', 'r' ) ){   $data = fgetcsv( $fp );   while( ( $data = fgetcsv( $fp ) ) !== FALSE ){    echo $data[0] . ' ' . $data[1] . ' ' . $data[2] . '<BR>';   }  } ?> ----------------------------------------- -【 仕様 】--------------------------------- [OS]: CentOS5 [Server]: Apache_2.2.10 [PHP]: PHP_5.2.6 -----------------------------------------

    • ベストアンサー
    • PHP
  • 【PHP】CSVファイルの特定行を書き出す

    PHPでCSVファイルを読み込み、特定行のみを別のCSVファイルに書き出したいと思います。 作りたいものは、 http://example.com/file.php?repert=5 とすると、「002.csvファイルの5行目のみ」を「003.csv」に書き込むというものです。 下記で作りましたが、 Parse error: syntax error, unexpected end of file in C:\xampp\htdocs\file.php on line 32 になります。 指摘された32行は ?> の行です。 ググると改行コードのトラブルのようでしたのでCR+LF CR LF と試しましたが、改善されません。 どこが不味いかご教示戴けませんでしょうか? 宜しくお願い致します。 <?php $repeat = $_GET['repert']; $inFile = '002.csv'; // 抽出元ファイル $outFile = '003.csv'; // 結果ファイル $inFp = fopen($inFile, 'rb'); $outFp = fopen($outFile, 'w'); while ($data = fgetcsv($fp, 10000)) { if ($count == $repeat) { { $outLineArray = array( 0 => $data[0], 1 => $data[1], 2 => $data[2] ); fputs($outFp, implode(",", $outLineArray) . ""); } } fclose($inFp); fclose($outFp); exit(); ?>

    • 締切済み
    • PHP
  • 多次元配列のオーソドックスなファイル書き込みについて教えてください

    PHP勉強中のAJAMAです。 下記にありますようなプログラムによって配列構造を持った変数をCSVファイルに書き込み、一行を1レコードとして管理をしたいと考えています。書き込み処理は、一意である変数の場合は、きっちりと書き込まれるのですが、配列変数の部分はarrayと書き込まれてしまいます。配列変数の中身を書き込むには、join(",",$xxxx)とすることで、すべてを同じ一行に書き込むことができました。しかしこれですと、すべてが、,区切りの二次元構造になってしまうので、これらのデータを読み込んで活用したい場合に、多次元構造を把握する処理をしなくてはいけないように見えるのですが、どうにもその仕組みを思考することができないので、模範的な手法を教えていただけないでしょうか。 serialize()も試してみましたが、知識がオブジェクト指向にまでいたっていないこともあり、うまくいきませんでした。(実行環境がPHP4だからかもしれません) 以 下、作成中のソースコードです。                     ※$numから右が配列変数部 $lines=array("$recordID",$nickname,$date,$area,$num,$item,$size); $lines=implode(",",$lines); $lines=$lines."\n"; serialize($lines); ←試行して不成功だった加筆部分。 //CSVファイルに書き込み $fp=fopen("report.csv","a"); flock($fp, LOCK_EX); fputs($fp,$lines); fclose($fp); 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • ?をつけて送信してもだめでしょうか

    ちゃんと表示されるのは これを実行したときで <?php $handle = fopen("jikken.csv", "r"); while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $num = count($data); if($data[0] == 9999999){ echo $data[1]."<br>\n"; } } fclose($handle); ?> しかし <?php $codex = $_POST['code']; $handle = fopen("jikken.csv", "r"); while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $num = count($data); if($data[0] == $codex){ echo $data[1]."<br>\n"; } } fclose($handle); ?> このように入れて ~~.php?code=9999999 としても うまくいかないのです 何がおかしいのでしょうか

    • 締切済み
    • PHP
  • CSVファイルへの書き込み:文字化けしてしまいます

    こんにちわ。 HTMLファイルから送られてきた3つのデータ(toi,kotae,yomi)を サーバ上のCSVファイルに書き込むプログラムを作りましたが、文字化けしてしまいます。 尚、同じプログラムをPC内のXAMPP環境で動かしていた際は、文字化けは起こりませんでした。 開発は「メモ帳」で行っています。 よろしくお願いいたします。 ***** ↓クライアント側のHTML <html> <head> <title>send data</title> </head> <body> <form name = "myform" action = "data_to_csv.php"> 問い: <input type = "text" name = "toi" value = ""><br> 答え: <input type = "text" name = "kotae" value = ""><br> 読み: <input type = "text" name = "yomi" value = ""><br> <p> <input name= "mybutton" type="submit" value="click" > </form> </body> </html> ***** ↓サーバー側のプログラム <html> <head> <title>the item added to the csv file</title> </head> <body> The items were sucessfully added to the CSV file.<br> <?php $toi = $_REQUEST['toi']; $kotae = $_REQUEST['kotae']; $yomi = $_REQUEST['yomi']; $lines=array($toi, $kotae, $yomi); $lines=implode(",", $lines); $lines=$lines."\n"; //write to a csv file $fp=fopen("data.csv", "a"); // flock($fp, LOCK_EX); fputs($fp, $lines); fclose($fp); ?> </body> </html>

    • 締切済み
    • PHP
  • csv読み込みについて

    基本的なことかも知れませんが、調べても分からなかったので質問です。 phpでcsvファイルを読み込むプログラムを書いているのですが、 $handle = fopen('***.csv', 'r'); while (!feof($handle)){ $data = fgets($handle); という方法で読み込んでいます。 このcsvファイルの一行目をとばして読み込みたい(二行目から読み込む) のですが、何か良い方法はないでしょうか?

    • ベストアンサー
    • PHP
  • array_spliceでの置き換えについて

    リファラでカウントカウントを図りたいと考えています。 内容としては、http://www.hoge.net/からのアクセスに対して 『hoge』だけと抽出し、格納しているCSVと照合し正ならカウント+1として「array_splice」で置き換えてる 単純なプログラムなのですが書き込まれるCSVに何故か空の行が下記のように挿入されてしまいます。 CSVの中身 --------------------------------------------- 0,http://www.sample.net 0,http://www.hoge.net 0,http://www.test.net 0,http://www.xxxx.net ↓↓↓↓↓↓↓↓↓↓↓ 0,http://www.sample.net 1,http://www.hoge.net [空白] 0,http://www.test.net 0,http://www.xxxx.net --------------------------------------------- また、アクセスする度に空白行が増えていく状況です。 別のプログラムでも「array_splice」は使っていますが いずれも正常に置き換えられています。 ソースを記述しますので何が原因なのかわかりません。 何方かアドバイスを頂ければと思います。 ソース --------------------------------------------- $string = $_SERVER['HTTP_REFERER']; $regex = "(http:\/\/)([^\/]+)(\/.*$)?"; match ( $string, $regex ); function match ( $string, $regex ) { if ( preg_match ( "/".$regex."/i", $string, $match ) ) { $keyURL=$match[2]; $Data=file("../csv/sample.csv"); for($i=0;$i<sizeof($Data);$i++){ $line=explode(",",$Data[$i]); if(ereg("$keyURL",$line[1])){ $count="$line[0]" + 1; $lines=array($count,$line[1]); $lines=implode(",",$lines); $lines=$lines."\n"; array_splice($Data,$i,1,$lines); $fp=fopen("../csv/sample.csv","w+"); flock($fp, LOCK_EX); foreach($Data as $item)fputs($fp,$item); fclose($fp); } } } } --------------------------------------------- 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 同じ配列処理

    認証プログラムを作っています。 PHPファイル内にユーザー名、パスを定義してます。 $usersと同じ変数に入れ認証処理のプログラムは変えたくないのです。 CSVのカンマ区切りで外部ファイルとして、読み込み$usersと同じ扱いにしたい。 PHPファイル内(認証処理は問題なく動作) $users = array( "admin" => "pass", "guest" => "guest" ); 今後は下記のようにしたいです。 CSVのカンマ区切りで外部ファイル(log.dat) admin,pass guest,guest PHPの処理 $lines = @file($userfile); for($i=0; $i<count($lines); $i++){ list($id, $pass) = explode(",", trim($lines[$i])); $users[$i] = array($id, $pass); } うまくできません。

    • ベストアンサー
    • PHP

専門家に質問してみよう