PHPのCSVファイルの読み書きと文字列処理を基礎から解説!初心者向けガイド
生徒
「先生、PHPでデータをCSVファイルに保存したり、読み込んだりすることってできますか?」
先生
「もちろんできますよ!CSV(シーエスブイ)ファイルは、Excel(エクセル)みたいに表形式でデータを扱えるテキストファイルのことです。」
生徒
「なるほど…。でも難しそうですね。初心者でもできるんですか?」
先生
「安心してください。PHPでは、fopenやfputcsv、fgetcsvといった関数を使えば、簡単にCSVの読み書きができます。それでは一緒に見ていきましょう!」
1. CSVファイルとは?Excelと何が違うの?
CSVファイルとは、「Comma Separated Values(カンマ・セパレーテッド・バリューズ)」の略で、データをカンマ(,)で区切ったテキスト形式のファイルです。たとえば、以下のような内容です:
名前,年齢,メールアドレス
山田太郎,25,taro@example.com
鈴木花子,30,hanako@example.com
Excelのように見た目が表になっていなくても、内容は表形式で、後でExcelなどで開くこともできます。
2. PHPでCSVファイルを書き込む方法(出力)
CSVファイルにデータを書き込むには、以下のステップを踏みます:
- ①
fopenでファイルを開く - ②
fputcsvで1行ずつ書き込む - ③ 最後に
fcloseで閉じる
具体的なコードは次のとおりです。
$data = [
["名前", "年齢", "メールアドレス"],
["山田太郎", "25", "taro@example.com"],
["鈴木花子", "30", "hanako@example.com"],
];
$fp = fopen("sample.csv", "w");
foreach ($data as $line) {
fputcsv($fp, $line);
}
fclose($fp);
このコードを実行すると、「sample.csv」というCSVファイルが作成され、中身にデータが書き込まれます。
3. PHPでCSVファイルを読み込む方法(入力)
次に、CSVファイルを読み込む方法を見てみましょう。
$fp = fopen("sample.csv", "r");
while (($line = fgetcsv($fp)) !== false) {
print_r($line);
}
fclose($fp);
このコードでは、1行ずつ配列として読み込まれ、print_rで内容が表示されます。
Array
(
[0] => 名前
[1] => 年齢
[2] => メールアドレス
)
Array
(
[0] => 山田太郎
[1] => 25
[2] => taro@example.com
)
4. CSVの文字コードに注意!Shift-JISとUTF-8の違い
日本語を含むCSVを扱う場合、「文字化け(もじばけ)」に注意が必要です。これは、文字コードが合っていないときに起きる現象です。
一般的に、WindowsのExcelは「Shift-JIS(シフト ジェイ アイ エス)」という文字コードを使っています。一方、PHPでは「UTF-8(ユーティーエフ エイト)」が主流です。
そのため、文字化けを防ぐには、mb_convert_encoding関数で文字コードを変換することが重要です。
$data = ["名前", "年齢", "メールアドレス"];
$converted = mb_convert_encoding($data, "SJIS-win", "UTF-8");
5. 文字列処理の基本(文字数カウント・一部抽出)
CSVの中の文字を操作するには、PHPの文字列処理が役立ちます。ここではよく使う処理をいくつか紹介します。
①文字数を数える: mb_strlen を使います。
$str = "こんにちは";
echo mb_strlen($str); // 5
②文字列の一部を取り出す: mb_substr を使います。
$str = "こんにちは世界";
echo mb_substr($str, 0, 5); // 「こんにちは」
③検索する文字列を探す: strpos は部分一致に使えます。
$email = "hanako@example.com";
if (strpos($email, "@") !== false) {
echo "メールアドレスです。";
}
6. 実践!CSVのデータを読み込んで条件で抽出しよう
最後に、CSVファイルの中から特定の条件に合うデータだけを取り出す例を見てみましょう。
$fp = fopen("sample.csv", "r");
while (($line = fgetcsv($fp)) !== false) {
if ($line[1] >= 30) {
echo $line[0] . "さんは30歳以上です。\n";
}
}
fclose($fp);
このコードでは、年齢が30歳以上の人だけを抽出して表示しています。実務でもよく使うテクニックなので、ぜひ覚えておきましょう。
まとめ
ここまでPHPでCSVファイルを扱うための基本的な操作を順番に確認してきましたが、改めて振り返ってみると、CSVという形式がとても柔軟で扱いやすい仕組みであることがよくわかります。特に、日常的にExcelでデータを表として管理している人にとっては、CSVがそのまま表形式として読み書きできるという点は大きな利点になります。PHPでは、専用の難しいライブラリを使わなくても、標準の関数で簡単にCSVに書き込んだり読み出したりできるので、初心者の段階からでも実務的な処理に挑戦していくことができます。 CSVへの書き出しでは、fopenでファイルを開いてfputcsvで配列を一行ごとに書き込むだけというわかりやすい手順で進められるため、最初に学ぶ外部ファイル操作としてとても適しています。書き出すデータも二次元配列として整理しておけば、「表の行」にあたる配列を一つずつfputcsvに渡すだけで整ったCSVファイルが完成するため、データ処理の基本構造も自然と理解できるようになります。また、読み込みについても、fgetcsvを使って一行ずつ配列として取得していく仕組みを理解しておくことで、取得したデータをどのように加工し、どのように表示するかという流れがつかみやすくなります。 さらに、CSVを扱ううえで避けて通れない問題として、「文字化け」というテーマがありますが、この記事の中でも触れたように、日本語を含むデータを扱う際には文字コードが大きく影響します。Windows環境でExcelを使う場合はShift-JISが前提となるケースが多く、PHPの内部処理ではUTF-8が中心となるため、そのまま文字列を書き出すと意図しない表示になることがあります。そのため、mb_convert_encodingを使って適切に文字コードを変換する習慣をつけておくことは実務でも非常に重要です。こういった細かな部分に気を配りながら処理を書くことで、実際の業務でも安心して使えるコードになります。 また、CSVに関連する処理ではPHPの文字列操作の基本も欠かせません。文字数を数えたり、一部の文字列だけを抜き出したり、特定の文字を探したりといった作業は、読み込んだデータを加工するうえで頻繁に登場します。特にmb_strlenやmb_substrのようにマルチバイト文字に対応した関数は、日本語のような複数バイトで表現される文字を扱う際に非常に役立ちます。処理の正確性にも関わる部分なので、習慣的にマルチバイト対応の関数を使うよう意識するだけで、後々のデータ処理の品質が大きく変わります。 CSVを読み込んだあとに条件に応じてデータを抽出する例では、単純な比較や検索を組み合わせるだけで実務に使える処理が簡単に作れることを実感できたと思います。fgetcsvで取得した配列の各要素を確認し、必要な条件に当てはまる場合だけ特定のメッセージを表示したり別の処理を行ったりするように書くことで、名簿管理、商品管理、顧客データの整理などさまざまな用途に応用できます。こうした処理は日常の開発でもよく登場するため、今回学んだ仕組みを手元で何度か試してみるだけで、実践的なスクリプトを書きこなせるようになります。 PHPのCSV操作はシンプルでありながら奥行きが深く、基本的な構文や関数を理解することでデータ管理の幅が一気に広がります。最初はファイル操作そのものに不安を感じることもあるかもしれませんが、実際にコードを動かしてみると意外とシンプルであることがわかり、徐々に自分でデータを扱う楽しさも見えてきます。今後は今回の内容を土台に、読み込んだデータの加工や、複数のファイルを扱う処理、大量データへの対応などに挑戦することで、より高度なデータ処理へ進むことができるでしょう。
サンプル:CSVを読み込み、名前を整形して出力する処理
今回学んだ内容を組み合わせて、CSVから名前を読み込み、敬称をつけて整形して表示する例を紹介します。
<?php
$fp = fopen("sample.csv", "r");
while (($line = fgetcsv($fp)) !== false) {
if ($line[0] !== "名前") {
$name = mb_convert_encoding($line[0], "UTF-8", "SJIS-win");
echo "<p class='user'>" . $name . "さんのデータを読み込みました。</p>";
}
}
fclose($fp);
?>
このサンプルでは、CSVの「名前」という列を読み込み、必要に応じて文字コードを整えてからHTMLとして出力しています。シンプルな処理ではありますが、文字列の加工・CSVの読み込み・HTML形式への変換など、多くの基本が詰まっています。学んだ内容を実際のコードの中でどう活かせるかを確認するうえでも最適な例です。
生徒
「CSVって単純なファイルだと思っていましたが、PHPで扱ってみると意外と便利で、いろんな処理に応用できるんですね。」
先生
「そうなんですよ。表形式のデータを扱う場面ではCSVは特に役立ちますし、PHPの標準関数だけで十分に操作できるのが魅力です。」
生徒
「文字コードの違いがあると表示が崩れたりする理由もようやく理解できました。mb_convert_encodingって大事なんですね。」
先生
「文字化けは日本語を扱ううえでは避けられないテーマなので、そこでつまずかないように理解しておくと実務でも役立ちますよ。」
生徒
「今回学んだ読み込みや条件抽出の例も、実際に使える場面がすぐ浮かんできました。自分でもいろいろ試してみたいです!」
先生
「ぜひ挑戦してみてください。CSVを扱えるだけで、データを使ったアプリケーションの可能性がぐっと広がりますよ。」