PHP에서 CSV 파일을 배열로 변환
-
fopen()
및fgetcsv()
를 사용하여 PHP에서 CSV를 배열로 변환 -
str_getcsv()
를 사용하여 PHP에서 CSV를 배열로 변환 -
array_map()
을 사용하여 PHP에서 CSV를 배열로 변환
CSV(쉼표로 구분된 값) 파일은 데이터 파이프라인의 큰 부분입니다. 프로그래밍 언어에 관계없이 애플리케이션에는 CSV를 위한 공간이 있습니다.
CSV 파일은 데이터를 행 및 열 형식으로 저장하는 데 널리 사용됩니다. 따라서 배열은 PHP 애플리케이션 내에서 CSV 파일을 처리할 때 해당 값을 보관할 수 있는 완벽한 데이터 구조입니다.
이 기사에서는 CSV를 읽고 PHP에서 배열로 변환할 수 있는 내장 PHP 함수를 자세히 설명하고 보여줍니다.
fopen()
및 fgetcsv()
를 사용하여 PHP에서 CSV를 배열로 변환
이 섹션과 다른 두 섹션에서는 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를 배열로 변환했습니다. 그러나 array_map()
및 file()
기능을 사용하여 PHP 내에서 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