PHP重命名数组键时遇到问题
我正在读取数百个CSV以导入数据库 某些列名包含相同的数据,但在所有文件中具有不同的名称 例如,一个文件将显示Phone,而另一个文件显示EveningPhone…两者都包含相同的数据,不同的名称 我正在尝试将所有内容重命名为EveningPhone,因为当我意识到不同文件中有不同的头文件名时,我已经完成了大部分代码。太懒了,我想没办法把所有的都替换掉 我正在创建一个assoc数组来匹配数据,然后将其关闭到数据库 问题是我无法将密钥重命名为一个约定。下面是它发生的函数:PHP重命名数组键时遇到问题,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我正在读取数百个CSV以导入数据库 某些列名包含相同的数据,但在所有文件中具有不同的名称 例如,一个文件将显示Phone,而另一个文件显示EveningPhone…两者都包含相同的数据,不同的名称 我正在尝试将所有内容重命名为EveningPhone,因为当我意识到不同文件中有不同的头文件名时,我已经完成了大部分代码。太懒了,我想没办法把所有的都替换掉 我正在创建一个assoc数组来匹配数据,然后将其关闭到数据库 问题是我无法将密钥重命名为一个约定。下面是它发生的函数: public funct
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
添加日期
姓氏
名字
地址
城市
陈述
ZipCode
铅定位器
电话
电子邮件
性
评论
最后,我仍然从一个使用Phone作为电话号码的文件中得到EveningPhone未定义的错误
有人有什么想法吗?你需要使用
if (!in_array('EveningPhone', $headers)) {
因为只要通过fgetcsv
读取,$headers
数组就是一个普通的索引列表。因此,数组\u键\u存在将无法工作。以后可能会将其用作dict,但此时它还不是数组键
要替换条目,请使用:
$headers[array_search("EveningPhone", $headers)] = "Phone";
fgetcsv不返回关联数组。它将返回一个以数据为值的数组,所以您应该在数组或数组搜索中使用(当您需要密钥时)。读取实际数据的代码可能正在使用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();
您发布的代码似乎还可以,您确定问题出在这个特定的代码片段中吗?您可以在我返回数组之前和之后在这里发布cvs文件吗。我把它贴在了原来的帖子里。你能把这份简历贴在
里吗?好的!)您必须像使用array\u search
或使用cycleThats这样替换项目!谢谢大家的帮助!