PHP无法重命名数组键

时间:2011-04-22 19:17:21

标签: php arrays multidimensional-array

我正在阅读数百个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未定义的错误。

有人有什么想法吗?

2 个答案:

答案 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();