我正在阅读数百个CSV以导入数据库。
某些列名称包含相同的数据,但在所有文件中具有不同的名称。
例如,一个文件会显示Phone,而另一个文件则表示EveningPhone ...两者都包含相同的数据,名称不同。
我正在尝试将所有内容重命名为EveningPhone,因为当我意识到在不同文件中有不同的标题名称时,我完成了大部分代码。懒得替换所有我猜...
我正在创建一个assoc数组来匹配数据,然后关闭它去的db ..
问题是我无法将密钥重命名为一个约定。以下是它发生的功能:
public function readCSV($file) {
/**
* @todo: LOAD THE FILE INTO A MULTIDIMENSIONAL ASSOCIATIVE ARRAY TO DETERMINE THE FILEDS
*/
// Read the first line to get the headers
$headers = fgetcsv($file);
if (!array_key_exists('EveningPhone', $headers)) {
if (array_key_exists('Phone', $headers)) {
$headers['EveningPhone'] = $headers['Phone'];
unset($headers['Phone']);
} else {
die("other");
}
}
format::neat_r($headers); // basically print_r but adds a new line to read it easier...
die();
在此之前和之后返回数组:
LeadID
ADDDATE 姓 名字 地址 市 州 邮政编码 LeadLocator 电话 电子邮件 性别 评论
最后,我仍然从使用Phone作为电话号码的文件中获取EveningPhone未定义的错误。
有人有什么想法吗?
答案 0 :(得分:2)
您需要使用
if (!in_array('EveningPhone', $headers)) {
因为$headers
数组是通过fgetcsv
读取后的正常索引列表。因此array_key_exists不起作用。您可能稍后将其用作dict,但此时它还不是数组键。
替换条目用途:
$headers[array_search("EveningPhone", $headers)] = "Phone";
答案 1 :(得分:0)
fgetcsv不返回关联数组。它将返回一个数组作为值的数组,因此您应该使用in_array或array_search(当您需要键时)。读取实际数据的代码可能使用array_combine来使用标头构建关联数组。
public function readCSV($file) {
/**
* @todo: LOAD THE FILE INTO A MULTIDIMENSIONAL ASSOCIATIVE ARRAY TO DETERMINE THE FILEDS
*/
// Read the first line to get the headers
$headers = fgetcsv($file);
if (!in_array('EveningPhone', $headers)) {
if ($phoneKey = array_search('Phone', $headers)) {
$headers[$phoneKey] = 'EveningPhone';
} else {
die("other");
}
}
format::neat_r($headers); // basically print_r but adds a new line to read it easier...
die();