質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2062閲覧

APIでcsv形式のデータを取得してPHPの連想配列に変換したい

MikiSF

総合スコア12

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2018/07/04 15:55

前提・実現したいこと

PHPで、複数のサービスのAPIを引っ張ってきて一覧できる表を作っています。
JSONかXML形式で取得できるサービスは問題ないのですが、1社だけAPIがCSV形式で提供されていて、うまく扱えていません。

https://url/1.1/asp/xxx.csv?paramater

という形式で、そもそもChromeでアクセスしてみると有無を言わさずオフラインにダウンロードさせてくるのですが、
理想はファイルをダウンロードせずに「カンマ区切りのテキスト形式のデータ」として一旦データベース上に保持し、それを連想配列にしたいです。

せめてサーバー上にダウンロードできればfgetcsvなどを使えるのかな、とも思うのですが…。
(初心者のため見当違いでしたらすみません!)

発生している問題・エラーメッセージ

cURLを利用してGETまではできるのですが、そのデータを連想配列にする方法がわかりません。

該当のソースコード

php

1<?php 2 $curl = curl_init($url); 3 curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); 4 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 5 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 6 $response = curl_exec($curl); 7 curl_close($curl); 8?>

ここまでで止まっています!

試したこと

explodeを使ってただの配列にすることはできたのですが、元のcsvが1行ごとに違う案件なので連想配列でないと使えないのです…。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

サンプル

php

1<?php 2 3$csv = <<<CSV 4"a", 1, 234 5"b", 2, 345 6"c", 3, 456 7CSV; 8 9$arr = []; 10$lines = explode(PHP_EOL, $csv); 11foreach ($lines as $line) { 12 $data = explode(',', $line); 13 $arr[] = [ 14 "A" => trim($data[0]), 15 "B" => trim($data[1]), 16 "C" => trim($data[2]) 17 ]; 18} 19 20var_dump($arr);

投稿2018/07/04 16:51

編集2018/07/04 16:53
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MikiSF

2018/07/04 17:11

できました!!! 改行はPHP_EOLというのがあるのですね。 そしてexplodeを二段階にするのも自分では思いつきませんでした。 案件ありきでPHPをいじりだしたため、基礎が全然わかっていませんでした。 これからしっかり勉強します! ありがとうございました!
退会済みユーザー

退会済みユーザー

2018/07/04 17:14

今回、とりあえずの回答だけど、自分の描くコードだったら、SplFileObject を使うだろうとは思います。
MikiSF

2018/07/04 17:18

そうなんですね…。 ありがとうございます。 SplFileObjectもPHPとCSVを調べているとたくさん出てきたのですが、ファイルにしか使えないのかと勘違いしていました。 後で調べてみます!
MikiSF

2018/07/04 17:25

本当ですね! お恥ずかしい… 確かにこちらのほうがスマートなのでこちらでやってみようと思います。 色々とありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問