将 CSV 中的特定列读取到数组
Read specific column in CSV to Array
我正在尝试读取我的 csv 文件中的特定数据并将其传输到数组。我想要的是获取某一列的所有数据,但我想从某一行开始(例如,第 5 行),有没有可能的方法来做到这一点?我现在只获取特定列中的所有数据,想从第 5 行开始,但想不出任何办法。希望你们能帮助我。谢谢!
<?php
//this is column C
$col = 2;
// open file
$file = fopen("example.csv","r");
while(! feof($file))
{
echo fgetcsv($file)[$col];
}
// close connection
fclose($file);
?>
您无法保证您的文件存在或您可以阅读它或....
类似于 fgets() 除了 fgetcsv() 解析它为 CSV 格式的字段读取的行和 returns 一个包含读取字段的数组。 PHP 手动
//this is column C
$col = 2;
// open file
$file = fopen("example.csv","r");
if (!$file) {
// log your error ....
}
else {
while( ($row = fgetcsv($file)) !== FALSE){
if (isset($row[$col])) // field doesn't exist ...
else print_r ($row[$col]);
}
}
// close file
fclose($file);
?>
是的,您可以定义一些标志来计算行数。看看下面的解决方案。它将从第 5 行开始打印,您也可以通过其索引访问列。例如。对于第二列,您可以使用 $row[1]
$start_row = 5; //define start row
$i = 1; //define row count flag
$file = fopen("myfile.csv", "r");
while (($row = fgetcsv($file)) !== FALSE) {
if($i >= $start_row) {
print_r($row);
//do your stuff
}
$i++;
}
// close file
fclose($file);
根据传入数据的质量和数量,您可能希望使用迭代条件来构建输出数组,或者您可能更愿意将所有 csv 数据转储到主数组中,然后将其过滤为所需的结构。
为了阐明我的代码片段中的计算能力,第 5 行数据位于索引 [4]
。相同的索引用于列定位——第 4 列位于索引 [3]
.
函数式方法(假设值中没有换行符并且没有设置任何额外的 csv 解析标志):
$starting_index = 4;
$target_column = 3;
var_export(
array_column(
array_slice(
array_map(
'str_getcsv',
file('example.csv')
),
$starting_index
),
$target_column
)
);
一种语言构造方法,基于递减计数器排除前导行。
$disregard_rows = 4;
$target_column = 3;
$file = fopen("example.csv", "r");
while (($row = fgetcsv($file)) !== false) {
if ($disregard_rows) {
--$disregard_rows;
} else {
$column_data[] = $row[$target_column];
}
}
var_export($column_data);
我正在尝试读取我的 csv 文件中的特定数据并将其传输到数组。我想要的是获取某一列的所有数据,但我想从某一行开始(例如,第 5 行),有没有可能的方法来做到这一点?我现在只获取特定列中的所有数据,想从第 5 行开始,但想不出任何办法。希望你们能帮助我。谢谢!
<?php
//this is column C
$col = 2;
// open file
$file = fopen("example.csv","r");
while(! feof($file))
{
echo fgetcsv($file)[$col];
}
// close connection
fclose($file);
?>
您无法保证您的文件存在或您可以阅读它或....
类似于 fgets() 除了 fgetcsv() 解析它为 CSV 格式的字段读取的行和 returns 一个包含读取字段的数组。 PHP 手动
//this is column C
$col = 2;
// open file
$file = fopen("example.csv","r");
if (!$file) {
// log your error ....
}
else {
while( ($row = fgetcsv($file)) !== FALSE){
if (isset($row[$col])) // field doesn't exist ...
else print_r ($row[$col]);
}
}
// close file
fclose($file);
?>
是的,您可以定义一些标志来计算行数。看看下面的解决方案。它将从第 5 行开始打印,您也可以通过其索引访问列。例如。对于第二列,您可以使用 $row[1]
$start_row = 5; //define start row
$i = 1; //define row count flag
$file = fopen("myfile.csv", "r");
while (($row = fgetcsv($file)) !== FALSE) {
if($i >= $start_row) {
print_r($row);
//do your stuff
}
$i++;
}
// close file
fclose($file);
根据传入数据的质量和数量,您可能希望使用迭代条件来构建输出数组,或者您可能更愿意将所有 csv 数据转储到主数组中,然后将其过滤为所需的结构。
为了阐明我的代码片段中的计算能力,第 5 行数据位于索引 [4]
。相同的索引用于列定位——第 4 列位于索引 [3]
.
函数式方法(假设值中没有换行符并且没有设置任何额外的 csv 解析标志):
$starting_index = 4;
$target_column = 3;
var_export(
array_column(
array_slice(
array_map(
'str_getcsv',
file('example.csv')
),
$starting_index
),
$target_column
)
);
一种语言构造方法,基于递减计数器排除前导行。
$disregard_rows = 4;
$target_column = 3;
$file = fopen("example.csv", "r");
while (($row = fgetcsv($file)) !== false) {
if ($disregard_rows) {
--$disregard_rows;
} else {
$column_data[] = $row[$target_column];
}
}
var_export($column_data);