UI設計したり、ウェブシステムを開発したりします。 

SQL見るだけクエリ#046 test.csvをPHPで配列に読み込む方法

記入日:2023-02-23 編集日:2023-02-23

SQL見るだけクエリ。今回もPHPの機能ですが、fgetcsv関数やstr_getcsv関数を使ってCSVファイルの内容を配列に読み込む方法を考えてみようと思います。

この記事を読むと(約5分)
データベースを使わずに、CSVファイルから文字列を取得する方法をイメージできるようになります。

CSVファイルの内容を配列に読み込むには、
fgetcsv関数やstr_getcsv関数を使って読み込むことが可能です。

 

例えば、test.csvの内容が以下のようになっているとします。

baseball,9
volleyball,6
tennis,1
 

fgetcsv関数を使う場合は、以下のように書くことができます。

//ファイルを開く
$fp = fopen("test.csv", "r");

//配列を初期化する
$array = array();

//ファイルの終わりまで1行ずつ読み込む
while ($data = fgetcsv($fp)) {
  //配列に追加する
  $array[] = $data;
}

//ファイルを閉じる
fclose($fp);

//配列の中身を表示する
print_r($array);

このコードを実行すると、以下のような出力が得られます。

Array
(
    [0] => Array
        (
            [0] => baseball
            [1] => 9
        )
    [1] => Array
        (
            [0] => volleyball
            [1] => 6
        )
    [2] => Array
        (
            [0] => tennis
            [1] => 1
        )
)
 

str_getcsv関数を使う場合は、以下のように書くことができます。

//ファイルの内容を文字列として取得する
$str = file_get_contents("test.csv");

//改行コードで分割して配列にする
$lines = explode("\n", $str);

//配列を初期化する
$array = array();

//各行に対してCSV形式から配列に変換する
foreach ($lines as $line) {

  //空行はスキップする
  if ($line == "") continue;
  
  //str_getcsv関数でCSV形式から配列に変換する
  $data = str_getcsv($line);
  
  //配列に追加する
  $array[] = $data;

}

//配列の中身を表示する
print_r($array);

このコードを実行すると、fgetcsv関数と同じ出力が得られます。

 

CSVを読み込む際に、fgetcsv関数とstr_getcsv関数はどう使い分ければ良いでしょうか?

fgetcsv関数とstr_getcsv関数は、CSV形式のデータを読み込むためのPHPの関数ですが、それぞれ違いがあります。

str_getcsv関数は、文字列からCSVデータを読み込みます。
fgetcsv関数は、ファイルポインタから1行ずつCSVデータを読み込みます。

つまり、str_getcsv関数は既に文字列としてデータを持っている場合に便利ですが、
一方、fgetcsv関数はファイルからリストなどのデータを取得する場合に便利です。

どちらの関数もオプションで区切り文字や囲み文字などを指定できます。

SQLの使いどころ

サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。

SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。

また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。

KK

機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。