つながるnet

CSVファイルを読み込む

CSVファイルを読み込む方法のご紹介です。
商品の規格や価格をCSVにまとめて読み込めたら、商品仕様を載せたり、商品の見積りシミュレーションを実装したりする上で役立ちます。

やってることは:

  • [メディアを追加]で、投稿に関連付けられたメディア(CSV)を取得
  • fopen:CSVファイルをオープン
  • fgetcsv:CSVを行ごとに読み込んで処理
  • mb_convert_encoding:Excelで作成したCSVはshift-jisなので必要に応じて変換
  • 行・列で必要に応じて配列に格納して、後処理に備える
//メディア取得(以下の例は投稿に関連付けた最初のCSVファイルを取得)
$args = array(
	'numberposts' => 1,//取得件数(初期値は5件、-1で全添付を取得)
	'order' => 'ASC',//並び順
	'orderby' => 'menu_order',//並び順の規準
	'post_type' => 'attachment',//取得種類(この指定で添付を取得できる)
	'post_mime_type' => 'text/csv',//取得するファイルタイプの指定
	'post_parent' => $post->ID//帰属する投稿ID
);
$attachments = get_posts( $args );
if ( $attachments ) {
	//csv解析開始
	foreach ( $attachments as $attachment ) {
		$fileCSV = $attachment->guid;

		#csvファイルをオープン
		$fp = fopen($fileCSV,"r");

		#fgetcsv関数がfalseを返却するまで実行
		$cnt = 0;
		while($data = fgetcsv($fp)){

			#csvファイルの列数だけ実行
			for($i=0;$i<count($data);$i++){
				#Excelで作成したCSVはshift-jisなのでこれがないと文字化けします
				$celDt = mb_convert_encoding($data[$i], "utf-8","shift-jis");

				#解析結果を配列に格納
				$hvalArr[$cnt][] = $celDt;//横方向の配列
				$vvalArr[$i][] = $celDt;//縦方向の配列
				$vvalArr[$i] = array_unique($vvalArr[$i]);//縦方向の配列(重複削除)
			}
			$cnt++;
		}
		#csvファイルをクローズ
		fclose($fp);
	}//csv解析完了

	#取得した配列を表示して確認してみる
	echo '<pre>';
	var_dump($hvalArr, $vvalArr);
	echo '</pre>';
}

直接メールしてみる

お名前 (必須)
メールアドレス (必須)
件名
ご相談内容
画像文字をご入力ください
captcha

コメントを残す