繁体   English   中英

PHP - 消息:未定义索引但索引存在

[英]PHP - Message: Undefined index but index exists

我有一个非常奇怪的问题。 我有一个读取 .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。

我做错了什么?

提前致谢。

您正在循环一个简单的数组,因此 var $data_from_csv将包含电子邮件地址。

错误信息是因为$data_from_csv中实际上没有email_address出现

所以相应地更改此代码

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

或者更好的是,给变量命名,这样发生的事情就更清楚了

foreach($csvData as $email){
    $this->add_email_to_a_group($email, $contact_group_id);
}

好的 - 我知道了。

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

对于循环中的测试,我添加了一个检查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);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM