我正在阅读数百个csv导入到数据库。
有些列名包含相同的数据,但在所有文件中具有不同的名称。
例如,一个文件写的是Phone而另一个文件写的是EveningPhone…两者包含相同的数据,不同的名称。
我试图将所有内容重命名为EveningPhone,因为当我意识到不同文件中有不同的头名称时,我已经完成了大部分代码。我想我懒得替换所有的……
我正在创建一个关联数组来匹配数据,然后关闭到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姓FirstName地址城市状态ZipCodeLeadLocator电话电子邮件性评论
最后,我仍然从使用Phone作为电话号码的文件中得到EveningPhone未定义的错误..
有人有什么想法吗?
你需要使用
if (!in_array('EveningPhone', $headers)) {
,因为$headers
数组在通过fgetcsv
读取后是一个正常的索引列表。因此array_key_exists不起作用。稍后您可能会将其用作字典,但此时它还不是数组键。
使用
来替换条目 $headers[array_search("EveningPhone", $headers)] = "Phone";
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();