PHPでCSVファイルを配列に変換する
-
fopen()
とfgetcsv()
を使用して、PHP で CSV を配列に変換する -
str_getcsv()
を使用して、PHP で CSV を配列に変換する -
array_map()
を使用して、PHP で CSV を配列に変換する
カンマ区切り値 (CSV) ファイルは、データ パイプラインの大きな部分を占めています。 プログラミング言語に関係なく、アプリケーションには CSV の場所があります。
CSV ファイルは、行と列の形式でデータを保存するのに一般的です。 したがって、配列は、PHP アプリケーション内で CSV ファイルを処理するときに値を保持するのに最適なデータ構造です。
この記事では、PHP で CSV を読み取って配列に変換できる組み込みの PHP 関数について詳しく説明し、紹介します。
fopen()
と fgetcsv()
を使用して、PHP で CSV を配列に変換する
このセクションと他の 2つのセクションでは、51 行 4 列の州の住宅の値 (state_housing_values.csv
) を保持する CSV ファイルを使用して、これらの機能がどのように機能するかを示します。
まず、CSV ファイルを開き、最初の引数として fgetcsv()
関数をポイントする fopen()
関数が必要です。残りの引数はオプションです。 その他のパラメータには、length
、separator
、enclosure
、および escape
が含まれます。
それでは、CSV ファイルを配列に変換してみましょう。
$file = fopen('state_housing_values.csv', 'r');
while (($line = fgetcsv($file)) !== FALSE) {
var_dump($line);
}
fclose($file);
出力:
array(4) {
[0]=>
string(5) "State"
[1]=>
string(5) "Price"
[2]=>
string(13) "1-year change"
[3]=>
string(15) "1-year forecast"
}
array(4) {
[0]=>
string(7) "Alabama"
[1]=>
string(7) "143,072"
[2]=>
string(3) "5.5"
[3]=>
string(4) "-1.1"
}
array(4) {
[0]=>
string(6) "Alaska"
[1]=>
string(7) "300,073"
[2]=>
string(4) "-2.3"
[3]=>
string(4) "-4.8"
}
array(4) {
[0]=>
string(7) "Arizona"
[1]=>
string(7) "277,574"
[2]=>
string(3) "7.5"
[3]=>
string(4) "-0.5"
}
array(4) {
[0]=>
string(8) "Arkansas"
[1]=>
string(7) "130,907"
[2]=>
string(3) "3.8"
[3]=>
string(4) "-1.7"
}
array(4) {
[0]=>
string(10) "California"
[1]=>
string(7) "578,267"
[2]=>
string(3) "4.4"
[3]=>
string(4) "-1.1"
}
...
先に進む前に、ヘッダーを削除できますが、これは PHP コードベースでは不要な場合があります。 そのためには、while
ループの前に $line = fgetcsv($file)
を追加するだけです。
$file = fopen('state_housing_values.csv', 'r');
$line = fgetcsv($file);
while (($line = fgetcsv($file)) !== FALSE) {
var_dump($line);
}
fclose($file);
出力:
array(4) {
[0]=>
string(7) "Alabama"
[1]=>
string(7) "143,072"
[2]=>
string(3) "5.5"
[3]=>
string(4) "-1.1"
}
array(4) {
[0]=>
string(6) "Alaska"
[1]=>
string(7) "300,073"
[2]=>
string(4) "-2.3"
[3]=>
string(4) "-4.8"
}
...
これでヘッダーが配列になくなり、
上記の配列形式は非常に扱いにくいものです。 配列をより使いやすくするには、コードをリファクタリングして array_combine()
を使用する必要があります。
<?php
$filename = 'state_housing_values.csv';
$delimiter = ',';
if (file_exists($filename) || is_readable($filename)) {
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
if (!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
var_dump($data);
} else {
error_log("Error reading file.");
}
?>
出力:
array(50) {
[0]=>
array(4) {
["State"]=>
string(7) "Alabama"
["Price"]=>
string(7) "143,072"
["1-year change"]=>
string(3) "5.5"
["1-year forecast"]=>
string(4) "-1.1"
}
[1]=>
array(4) {
["State"]=>
string(6) "Alaska"
["Price"]=>
string(7) "300,073"
["1-year change"]=>
string(4) "-2.3"
["1-year forecast"]=>
string(4) "-4.8"
}
...
区切り文字がコンマ ,
でない場合があります。 したがって、区切り文字を指定する必要があります。
その他の区切り文字は、セミコロン ;
、スペース " "
、またはタブ \t
です。 関数内で区切り文字を指定するには、次のコードに従います。
$delimiter = ';'; // semi-colon
fgetcsv($handle, 1000, $delimiter)
str_getcsv()
を使用して、PHP で CSV を配列に変換する
ここでは、file()
関数を使用して CSV を処理し、foreach
ループを使用してファイル ポインターをループし、str_getcsv()
を介して配列 $data
内に各値を配置します。 関数。
$data = array();
$lines = file('state_housing_values.csv', FILE_IGNORE_NEW_LINES);
foreach ($lines as $key => $value) {
$data[$key] = str_getcsv($value);
}
print_r($data);
出力:
Array
(
[0] => Array
(
[0] => State
[1] => Price
[2] => 1-year change
[3] => 1-year forecast
)
[1] => Array
(
[0] => Alabama
[1] => 143,072
[2] => 5.5
[3] => -1.1
)
[2] => Array
(
[0] => Alaska
[1] => 300,073
[2] => -2.3
[3] => -4.8
)
[3] => Array
(
[0] => Arizona
[1] => 277,574
[2] => 7.5
[3] => -0.5
)
[4] => Array
(
[0] => Arkansas
[1] => 130,907
[2] => 3.8
[3] => -1.7
)
[5] => Array
(
[0] => California
[1] => 578,267
[2] => 4.4
[3] => -1.1
)
[6] => Array
(
[0] => Colorado
[1] => 408,794
[2] => 3.1
[3] => -1.7
)
[7] => Array
(
[0] => Connecticut
[1] => 259,855
[2] => 1.4
[3] => -2.3
)
[8] => Array
(
[0] => Delaware
[1] => 257,521
[2] => 0
[3] => -2.9
)
[9] => Array
(
[0] => Florida
[1] => 252,309
[2] => 3.6
[3] => -1.5
)
[10] => Array
(
[0] => Georgia
[1] => 206,804
[2] => 4.9
[3] => -1.5
)
...
上記のコードにいくつかの変更を加えて、ヘッダーを削除します。 if
条件ステートメントを使用して、ヘッダーを保持する最初の配列を削除します。
foreach ($lines as $key => $value) {
if (!$key == 0) {
$data[$key] = str_getcsv($value);
}
}
print_r($data);
出力:
Array
(
[1] => Array
(
[0] => Alabama
[1] => 143,072
[2] => 5.5
[3] => -1.1
)
...
array_map()
を使用して、PHP で CSV を配列に変換する
上記のコード スニペットでは、ループまたは前処理を使用して CSV を配列に変換しています。 ただし、PHP 内で array_map()
および file()
関数を使用して CSV ファイルを配列に変換する、より優れた、より高速で読みやすい方法があります。
$csv = array_map('str_getcsv', file('state_housing_values.csv'));
print_r($csv);
出力:
Array
(
[0] => Array
(
[0] => State
[1] => Price
[2] => 1-year change
[3] => 1-year forecast
)
...
[50] => Array
(
[0] => Wyoming
[1] => 256,089
[2] => 5.7
[3] => -1.6
)
)
これらの関数は、多くの値を持つ CSV ファイルを処理できます。それを示すために、1857 行 17 列のレバレッジ データを保持する CSV ファイルで array_map()
関数を使用し、ヘッダーを削除します。 アレイの。
$csv = array_map('str_getcsv', file('leverage.csv'));
unset($csv[0]);
print_r($csv);
コードの出力 (0.257 秒で終了) は以下のとおりです。
Array
(
[1] => Array
(
[0] => 001300
[1] => 20150331
[2] => 2015
[3] => 1
[4] => INDL
[5] => C
[6] => D
[7] => STD
[8] => USD
[9] => 2015Q1
[10] => 2015Q1
[11] => 45357.0000
[12] => 781.7070
[13] => 5661.0000
[14] => 15432.0000
[15] => A
[16] => 104.3100
)
...
[1856] => Array
(
[0] => 252940
[1] => 20171231
[2] => 2017
[3] => 3
[4] => INDL
[5] => C
[6] => D
[7] => STD
[8] => USD
[9] => 2017Q4
[10] => 2017Q3
[11] =>
[12] =>
[13] =>
[14] =>
[15] => A
[16] => 7.2700
)
)
CSV ファイルは、コードで再生するために以下で利用できます。
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn