Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP重命名数组键时遇到问题_Php_Arrays_Multidimensional Array - Fatal编程技术网

PHP重命名数组键时遇到问题

PHP重命名数组键时遇到问题,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我正在读取数百个CSV以导入数据库 某些列名包含相同的数据,但在所有文件中具有不同的名称 例如,一个文件将显示Phone,而另一个文件显示EveningPhone…两者都包含相同的数据,不同的名称 我正在尝试将所有内容重命名为EveningPhone,因为当我意识到不同文件中有不同的头文件名时,我已经完成了大部分代码。太懒了,我想没办法把所有的都替换掉 我正在创建一个assoc数组来匹配数据,然后将其关闭到数据库 问题是我无法将密钥重命名为一个约定。下面是它发生的函数: public funct

我正在读取数百个CSV以导入数据库

某些列名包含相同的数据,但在所有文件中具有不同的名称

例如,一个文件将显示Phone,而另一个文件显示EveningPhone…两者都包含相同的数据,不同的名称

我正在尝试将所有内容重命名为EveningPhone,因为当我意识到不同文件中有不同的头文件名时,我已经完成了大部分代码。太懒了,我想没办法把所有的都替换掉

我正在创建一个assoc数组来匹配数据,然后将其关闭到数据库

问题是我无法将密钥重命名为一个约定。下面是它发生的函数:

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这样替换项目!谢谢大家的帮助!