【发布时间】:2014-09-19 13:40:32
【问题描述】:
我刚刚编写了一个 php 函数,该函数将从 csv 文件中读取数据并将数据存储到一个数组中,其中每行数据作为一个元素。每个元素都是一个关联数组,以 csv 标头为键。
函数如下所示:
function parse_csv($csv_path) {
if(is_file($csv_path)&&file_exists($csv_path)) {
$csv_data = array();
$csv_header = array();
$n = 0;
try {
$csv_file = fopen($csv_path, "r");
while (!feof($csv_file)) {
$csv_line = fgetcsv($csv_file);
if(array(NULL) !== $csv_line && !empty($csv_line)) {
$n++;
if($n == 1) {
$csv_header = $csv_line;
}
else {
$csv_row = array();
for($i=0;$i<count($csv_header);$i++) {
$csv_row[$csv_header[$i]] = $csv_line[$i];
}
$csv_data[] = $csv_row;
}
}
}
return $csv_data;
}
catch (Exception $e) {
return FALSE;
}
}
else {
return FALSE;
}
}
我做了一个测试,用 print_r 打印了函数返回的数组,如下:
$csv = parse_csv('D:\countries.csv');
print_r($csv);
输出是:
Array
(
[0] => Array
(
[TermName] => Afghanistan
[TermDescription] =>
[TermFormat] =>
)
[1] => Array
(
[TermName] => Albania
[TermDescription] =>
[TermFormat] =>
)
[2] => Array
(
[TermName] => Algeria
[TermDescription] =>
[TermFormat] =>
)
[3] => Array
(
[TermName] => American Samoa
[TermDescription] =>
[TermFormat] =>
)
[4] => Array
(
[TermName] => Andorra
[TermDescription] =>
[TermFormat] =>
)
)
但是当我尝试像这样访问单个元素时
print($csv[1]["TermName"]);
我收到错误:未定义索引:第 49 行 C:\xampp\htdocs\test\test.php 中的 TermName。
这真的让我很困惑。我错过了什么吗?
找到原因:
因为我用 Windows 记事本保存了 csv 文件,所以它在文件中添加了 BOM。所以第一个标题变成了[BOM]TermName。删除 BOM 后,现在一切正常。
【问题讨论】:
-
你能粘贴更多代码吗?
-
您缺少您尝试过的代码。请粘贴。
-
刚刚添加了功能码,谢谢各位。
-
请检查我的答案并使用此功能测试您的 csv 文件。没有理由无法使用您提供的代码访问您的数组