CSVの操作方法について

このQ&Aのポイント
  • csvからデータを配列に格納する方法について説明します。
  • 指定したカラム名や番号の情報だけを取得する方法について説明します。
回答を見る
  • ベストアンサー

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);

  • dcx147
  • お礼率33% (214/636)
  • PHP
  • 回答数1
  • ありがとう数9

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

  • ベストアンサー
  • Hardking
  • ベストアンサー率45% (73/160)
回答No.1

explode関数を使用する。 【使用例】 $arrydata = explode(",", $data); print $arrydata[0] //一番目のカラムデータ表示 print $arrydata[1] //二番目のカラムデータ表示 print $arrydata[2] //三番目のカラムデータ表示

関連するQ&A

  • JS(ajax)でphp(csv)の読み込み

    こんにちは。 Javascriptのご教授お願いしたく、書き込みました。 今JavascriptでAjaxを使って、CSVを読み込むPHPを実行しています。 PHPでは、CSVを読み込み(readcsv.php)、その結果を別のファイル(alert.html)に受け渡しています。 問題が、読み込んでいるJavascript側でもデータを一つ一つ取得したいですが、 方法が分かりません。ご教授お願いします。 構成 : alert.html(Javascript), readcsv.php, test.csv コード構成 : -------------------------------------------------------------------------- alert.html <script type="text/javascript"> $.ajax({ type: "POST", url: "readcsv.php", success: function(printString) { alert(printString); --> ここをどうするべきか悩んでいます。 }, error:function(){ alert("error"); } } ); </script> ------------------------------------------------------------------------------- readcsv.php <?php $filename = "test.csv"; $row = 1; $rowS = 1; if (($handle = fopen($filename, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, "*")) !== FALSE) { $num = count($data); $row++; for ($c=0; $c < $num; $c++) { $String = explode(",", $data[$c]); foreach ($String as $AllString) { echo $AllString."\n"; } echo "\n"; } } fclose($handle); } ?> ---------------------------------------------------------------------------- test.csv 1,2,3,4,6,8*9,1,2,3,5,7,2,1,3,5*7,2,1,2,3,5,7,2*1,5,3 ---> 数字の羅列(コンマ区切り) ---------------------------------------------------------------------------- です。 一番問題になっているところは、 alert.html の alertのところで、 readcsv.php から受け取った値を一つ一つ変数に格納したいところです。 ご教授お願いします。

  • csvしたいのですが

    現在 tab形式で出力している以下のプログラムを CSV形式で出力できるようにしたいのですが、教えてください。 $filename = "history.tab"; header("Content-Type: text/tab-separated-values"); header("Content-Disposition: attachment; filename=$filename"); while($row = mysql_fetch_array($rs)) { $x =$row['sirial'] . "\t". $row['e_date'] . "\t". $row['regdate']."\r\n"; echo mb_convert_encoding($x, "SJIS","EUC-JP");}

    • ベストアンサー
    • PHP
  • 取得した列データを行に書き込むには

    取得した列のデータを出力する際に行に対して書き込みたいのですが、 どのように生成すればいいでしょうか。 $row[1]は1列分のデータが読み込まれています。 よろしくお願いします。 $filename = "dltest.csv"; $fp = fopen($filename, "w"); for($i=0;$i<$line;$i++) { $row = mysql_fetch_row($rs); $top=$row[1]; fputs($fp,split(',',$top));

    • 締切済み
    • PHP
  • PHP 全角文字が文字化けまたは表示されない

    PHPでエクセルで作成したcsvファイルから商品一覧を表示させたいのですが。 一覧ページで日本語や大文字英数が含まれるデータが表示されません。 エンコードはいろいろ試してみたのですが、utf-8だと文字化け、EUC_JPやSJISだと表示されなくなってしまいます。 csvから呼び出す際に mb_convert_variables('utf-8', 'sjis-win', $tmp); としても文字化けします。 ちなみに、$dataでprintすると問題なく表示されます。 $data1では上手く表示されません。 なので、for($i=$start;$i<$end;$i++){ 以降でおかしいんだろうなとは思うのですが。 1ページに数件ずつで、次へ次へで移りたいので、ここの部分が必要です。 商品詳細ページで、同じcsvファイルを読みだしてますが、 while ($data = fgetcsv($fp, 10000)) { if($atai==$data[0]){ ・・・・ と書いてこちらは問題なく表示できています。 何が原因か見つけられずに困っています。 お分かりになる方、教えてください。 初心者レベルですので、なるべく具体的に書いていただけると助かります。 よろしくお願いします。 //ファイルからデータを読み込む処理 function inst_view($page=0) { //読み込むファイル名 $filename = FILE_PATH; //データ数をカウントする $row = 0; $data = array(); //CSVファイルの中身をすべて読み込む $handle = fopen($filename, "r"); while (($tmp = fgetcsv($handle, 1000, ",")) !== FALSE) {    if (!empty($choice1) && $choice1 == "4") { $num = count($tmp); if( $tmp[0] == "" ){ }else{ $data[$row]["no"] = $tmp[0]; $data[$row]["hito"] = $tmp[1]; $data[$row]["kuni"] = $tmp[2]; $data[$row]["tochi"] = $tmp[3]; $data[$row]["nen"] = $tmp[4]; $data[$row]["size"] = $tmp[5]; $data[$row]["cm"] = $tmp[6]; $row++; } } } fclose($handle); //降順にする rsort($data); //1ページに表示するデータ数を読み込む $page_length = PAGE_LENGTH; //全ページ数を求める処理 $maxpage = $row/$page_length; $tmp = (int)$maxpage; if($maxpage>$tmp){$maxpage=$tmp+1;} $maxpage--; //現在のページ数からデータ開始と終わりを求める $start = $page * $page_length; $end = ($page * $page_length) + $page_length; //データを格納する配列と、その指標 $cnt=0; $data1 = array(); //データ格納処理(スタートからエンドまで繰り返す。 for($i=$start;$i<$end;$i++){ //最大データ数を超えたら取得終了する。 if($i >= $row){break;} $data1[$cnt]["no"] = $data[$i]["no"]; $data1[$cnt]["hito"] = $data[$i]["hito"]; $data1[$cnt]["kuni"] = $data[$i]["kuni"]; $data1[$cnt]["tochi"] = $data[$i]["tochi"]; $data1[$cnt]["nen"] = $data[$i]["nen"]; $data1[$cnt]["size"] = $data[$i]["size"]; $data1[$cnt]["cm"] = $data[$i]["cm"]; $cnt++; } return $data1; } 別のファイルからinst_viewを呼び出しています。

    • 締切済み
    • PHP
  • mb_detect_encoding

    mb_detect_encodingについてどなたかご教授ください。 PHPによるWebアプリケーションスーパーサンプル http://www.nishi2002.com/phpsample/​ にて勉強してるのですが、どうしてもわからない所がありまして 知恵を貸していただきたく投稿いたします。 本書の中で $enc_disp = "EUC-JP"; $enc_db = "EUC-JP"; // データの文字コードを変換する関数 function cnv_enc($string, $to, $from) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, $from . ", " . $to); if ($det_enc and $det_enc != $to) { return mb_convert_encoding($string, $to, $det_enc); } else { return $string; } } とユーザー定義関数を指定して // 取り出したデータを表示する echo "<select name=\"menu1\">"; while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { echo "<option value=\"".$row["id"]."\">". cnv_enc($row["nam"], $enc_disp, $enc_db)."</option>"; このように使用しているのですが 定義する段階での $det_enc = mb_detect_encoding($string, $from . ", " . $to); この部分がわかりません。 この関数は文字エンコーディングを検出する関数であるというのはわかるんですが、(http://jp.php.net/manual/ja/function.mb-detect-encoding.php)参照 「$from」 のあとの 「.」 の意味などがどうしてもわかりません。 またなぜ引数が3つ指定されているのでしょうか? 調べてみたのですが解答にいきつかず、どなたかご教授お願いします!!!

    • ベストアンサー
    • PHP
  • CSVファイルの読み込みで日本語が出力されない!

    PHPを使ってCSVファイルを部分的に読み込むコードを教えてもらいました。 しかし、CSVに入力している英語と数字は出力されるのに、日本語は空白のままでした。 教えてもらったコードは次の通りですですが、日本語も出力する場合、どうしたら良いのでしょうか? <?php function h( $str ) { return htmlentities( $str, ENT_QUOTES, 'UTF-8' ); } ?> <? if (($handle = fopen("test.csv", "r")) !== FALSE) : ?> <table class="table1" width="100%" cellspacing="0" cellpadding="0" border="0"> <tr> <? $i = 0; ?> <? while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) : $i ++ ?> <td><?=h($data[0])?><img src="http://1-<?=h($i)?>.gif"><br><?=h($data[1])?><br><?=h($data[2])?><br><span class="red"><?=h($data[3])?>円</span></td> <? endwhile; ?> </tr> </table> <? fclose($handle); ?> <? endif; ?>

    • ベストアンサー
    • PHP
  • csvファイルを読み込んで二次元配列に格納したい

    200×250のある数字と文字の入力されたcsvファイル(またはtxtファイル)を読み込んで2次元配列に格納したいのです。 色々調べるとカンマの処理が必要ということがわかりましたが、どのようにソースを書けばよいかわかりません。使用言語はC言語です。 また、実際にcsvファイルを読み込むようにプログラムを書いてみましたが、すべて-858993460となって表示されます。 プログラミング初心者で勉強中なため困っています。 回答よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #define row 200 #define column 250 int main() { int i, j; int data[row][column]; FILE *fp; fp = fopen("sample.csv", "r"); if (fp == NULL){ printf("ファイルがありません\n"); return 1; } for (i = 0; i < row; i++){ for (j = 0; j < column; j++){ fscanf(fp, "%lf", &data[i][j]); } } for (i = 0; i<row; i++){ for (j = 0; j < column; j++){ printf("%3d ", data[i][j]); } printf("\n"); } fclose(fp); return 0; }

  • UTF8のPHPにSJISのPHPを組みこむ方法?

    charset=UTF-8で動作するPHPファイルがあります。 ****************** UTF-8で動作するPHP ****************** <?php ・・・・・・・・ header("Content-type:text/html;charset=UTF-8"); ?> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; UTF-8"> <title><?=$API_NAME?></title> </head> ・・・・・・・・・・ ・・・・・・・・・・ </html> のような形です。 一方、SJISで動作する下記のPHPがあります。 このS_JIS PHPを上記のUTF-8PHPの中の</head>と</html>の間に組み込みたいと思います。 下記のPHPは、data.csvからファイルの中身を表示させるPHPですが、そのまま放り込むと 文字化けしてしまいます。 (下記のPHP単体だと正しく表示されます。charset=UTF-8下で文字化けします) data.csvの文字コードをUTF-8にする。LF にするなど試してみましたが文字化けしたままでした。 また、#include <string.h>の下に mb_convert_encoding($string, 'utf8', 'sjis'); を入れてみましたが文字化けは直りませんでした。 お手数ですが下記のPHPをUTF8上で正しく表示させる方法が分かりましたらご教授願います。 ****************** SJISで動作するPHP ****************** <? #include <string.h> // CSV ファイルを読み込み、$data配列に格納 $handle = fopen("data.csv", "r"); while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) { if ( strcmp( $row[0] , '110' ) == 0 ) { $data[] = array( 'shop'=>$row[0] ,'priceA'=>$row[1], 'priceB'=>$row[2], 'place'=>$row[3] ); } } fclose($handle); // 列方向の配列を得る foreach ($data as $key => $row) { $shop[$key] = $row['shop']; $priceA[$key] = $row['priceA']; $priceB[$key] = $row['priceB']; $place[$key] = $row['place']; } // 結果の表示 for( $i=0 ; $i<count( $data ) ; $i++ ) { print "$shop[$i] $priceA[$i] $priceB[$i] $place[$i]<br>\n"; } ?>

    • ベストアンサー
    • PHP
  • CSV...

    <?php $csv = "system.csv"; $array = file($csv); $c = count($array); $item = 5; //1ページの表示件数 $page = $_GET['page']; //ページ番号 $start = $page * $item; //pageが0 $matched = 0; //条件にマッチした数 foreach( $array as $i => $row ) { $row = trim( $row ); list($id[$i],$name[$i],$sex[$i],$age[$i],$stamp[$i]) = split("\,",$array[$i]); if($sex[$i] == 1 ) { if( $matched >= $start ) { echo $name[$i]; } $matched++; if( $matched - $start >= $item ) break; } } echo "登録件数:$i件"; if( $page ) echo '<a href="search_4?page=' . ( $page - 1 ) . '">前へ</a>'; else echo '前へ'; if( $i < $c ) echo '<a href="search_4?page=' . ( $page + 1 ) . '">次へ</a>'; else echo '次へ'; ?> かなりアホな質問かもしれませんが、動くかテストしようと思い 次へのリンクを押すとsearch_4?page=1となりNot Foundと表示されます。 どうしてですか?

    • ベストアンサー
    • PHP
  • PHPでのMYSQL操作について教えてください。

    MYSQLの中のデータをPHPで一覧にして表示し、フォームの内容を変更してから変更ボタンを押すと変更を反映した内容が一覧になって表示されるようにしたいのですが、うまくいきません。 コードは以下のとおりです。 <?php //接続設定 $sv="localhost"; $dbname="****"; $user="****"; $pass="****"; //文字コード $enc_disp="shift-jis"; $enc_db="shift-jis"; //データの文字コードを変更する function cnv_enc($string, $to, $from) { //文字コード変換 $det_enc=mb_detect_encoding($string, $from . ", " . $to); if ($det_enc and $det_enc != $to) { return mb_convert_encoding($string, $to, $det_enc); } else{ return $string; } } //データをSQL用に変換 function cnv_sqlstr($string) { if (get_magic_quotes_gpc()) { $string = stripslashes($string); } $string = htmlspecialchars($string); $string = mysql_real_escape_string($string); return $string; } //データベース接続 $conn=mysql_connect($sv,$user,$pass) or die("接続エラー"); mysql_select_db($dbname) or die ("接続エラー"); //編集するデータを取得する if (count($_POST) >0) { $number=$_POST["number"]; $name=$_POST["name"]; //データが送信された時にはデータを変更する if (strlen($number) and strlen($name)) { //データを変更する $sql = "UPDATE customer SET number = ".cnv_sqlstr($number).", name = '".cnv_sqlstr(cnv_enc($name, $enc_db, $enc_disp))."', WHERE (number = ".cnv_sqlstr($number).");"; mysql_query($sql, $conn) or die("データ変更エラー"); } } //データを取り出す $sql = "SELECT number,name FROM テーブル名 ORDER BY number ;"; $res = mysql_query($sql, $conn) or die ("データ抽出エラー"); //取りだしたデータを表示する echo "<table border =\"1\">"; echo "<tr>"; echo "<td> </td>"; echo "<td>名前</td>"; echo "</tr>"; while ($row =mysql_fetch_array($res, MYSQL_ASSOC)) { echo "<form method=\"POST\" action=\"".$SERVER["PHP_SELF"]."\">"; echo "<tr>"; echo "<td><input type=\"submit\" value=\"変更\"></td>"; echo "<input type=\"hidden\" value=\"".$row["number"]."\" name=\"number\">"; echo "<td><input type=\"text\" name=\"name\" value=\"".cnv_enc($row["name"], $enc_disp, $enc_db) . "\"></td>"; echo"</tr>"; echo"</form>"; } echo"</table>"; //接続を解除する mysql_close($conn); ?> 現在は内容を変更して変更ボタンを押すと、「変更エラー」が表示される状態です。 何が原因かわからず行き詰っています。 よろしくお願いします。

    • ベストアンサー
    • MySQL