首页 > 解决方案 > PHP - 消息:未定义索引但索引存在

问题描述

我有一个非常奇怪的问题。我有一个读取 .csv 文件并将其存储在 MySQL 数据库中的小脚本。上传和读取文件工作正常(这是 CodeIgniter 的 csvreader 库) - 当我这样做时:

$csvData = $this->csvreader->parse_csv($_FILES['csv_file']['tmp_name']);
   var_dump($csvData);

我得到了正确的结果:

array(62) {
  [1]=>
  array(1) {
    ["email_address"]=>
    string(29) "info.bucharest@xxx.com"
  }
  [2]=>
  array(1) {
    ["email_address"]=>
    string(28) "cristina.banu@xxx.com"
  }
  [3]=>
  array(1) {
    ["email_address"]=>
    string(24) "office-ro@gxxx.com"
  }

接下来我要做的就是循环

 foreach($csvData as $data_from_csv){
  $this->add_email_to_a_group($data_from_csv['email_address'], $contact_group_id);
 }

但此刻我收到消息:

严重性:通知消息:未定义索引:email_address

所以在循环 var_dumping

var_dump($data_from_csv);

给了我这个结果:

array(1) { ["email_address"]=> string(29) "info.bucharest@xxx.com" }

整个项目在共享主机 PHP 7.3 上运行,框架是 CodeIgniter3。

我做错了什么?

提前致谢。

标签: phparrayscodeigniter

解决方案


好的 - 我明白了。

在这种情况下发生的事情可能与字符编码有关......我认为。

对于我循环中的测试,我添加了一个检查 var_dump(array_keys($data_from_csv));,它显示“电子邮件”由 8 个字符而不是 5 个字符组成

foreach($csvData as $data_from_csv){
   var_dump(array_keys($data_from_csv)); 
// this was returnig (int)8 rather than expected (int)5 
   $this->add_email_to_a_group($data_from_csv['email'], $contact_group_id);
}

所以......现在我将努力确保用户上传的文件被正确编码。谢谢


推荐阅读