【问题标题】:Creating an associative array from a csv file php从 csv 文件 php 创建关联数组
【发布时间】:2013-03-14 06:25:09
【问题描述】:

我正在尝试读取一个 csv 文件,然后将第一列和第 21 列存储在关联数组中,以便第一列成为键,第 21 列成为值。

稍后我想根据“键”提取记录。包含代码的PHP文件是upload.php

$calls = array();
$file_handle = fopen($C1.".File.csv","r"); // $C1 is defined before.
 //Just appending something to the file name. This file exists. 
while (!feof($file_handle) ) {
    $line= fgetcsv($file_handle, 1024);
    $calls[$line[0]] = $line[20]; //Line 94 of this file

}
fclose($file_handle);
print_r($calls);

我收到此错误

Undefined offset: 20 in upload.php on line 94

我哪里错了。

【问题讨论】:

  • 第 94 行的 upload.php 中有什么内容?因为您在这里的任何地方都没有使用偏移量 24,所以您的问题一定在其他地方。
  • 您在该行中缺少逗号。或者有可能整行都是空白的。 var_dump($line);
  • 对不起,在这种情况下偏移 20.. 不是 24
  • 考虑使用fgetcsv()功能手册:php.net/manual/en/function.fgetcsv.php

标签: php arrays associative-array


【解决方案1】:

零索引数组中的第 20 个“列”将是 $line[19]

根据您的评论更新(以及后续编辑):

错误在循环期间的某个时刻明确指出 $line[20] 未设置 - 如果每行都有合适的列数,那么我能想到的唯一另一个原因是末尾有一个空行CSV 文件。

例如。

1.  foo, bar, baz
2.  a  , b  , c
3.                    <-- empty line as a result of carriage return

所以...您想在fgetcsv 之前检查trim($line)!='' 和/或作为良好错误处理检查的一部分,检查数组的长度是否大于您尝试读取的最高索引。

【讨论】:

  • 谢谢。但我不认为那是错误。我正在尝试读取的 csv 大约有 50 列。
猜你喜欢
  • 2018-10-04
  • 2016-05-29
  • 2015-09-01
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多