PHP重命名数组键时出现问题



我正在阅读数百个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();

相关内容

  • 没有找到相关文章

最新更新