Php 获得;未定义索引“;在使用str_getcsv()创建的数组上;但var_dump()显示密钥存在
我使用Php 获得;未定义索引“;在使用str_getcsv()创建的数组上;但var_dump()显示密钥存在,php,arrays,undefined-index,Php,Arrays,Undefined Index,我使用str\u getcsv()创建了一个数组: 返回的$array从var\u dump($array)输出该值 当我尝试访问$array['fund']时,我得到注意:未定义的索引:fund。我的第一个想法是,fund在CSV标题的键名中有一个隐藏字符,因为$array['name']可以工作,但我已经检查过,唯一隐藏的字符是CRLF 我在多维数组的StackOverflow上看到过类似的问题,但在一维数组中没有 任何帮助都将不胜感激。我甚至尝试过对StdClass和$array->fun
str\u getcsv()
创建了一个数组:
返回的$array
从var\u dump($array)
输出该值
当我尝试访问$array['fund']时代码>,我得到注意:未定义的索引:fund
。我的第一个想法是,fund
在CSV标题的键名中有一个隐藏字符,因为$array['name']
可以工作,但我已经检查过,唯一隐藏的字符是CR
LF
我在多维数组的StackOverflow上看到过类似的问题,但在一维数组中没有
任何帮助都将不胜感激。我甚至尝试过对StdClass和$array->fund
进行强制转换,得到了一个关于不存在属性的类似错误
我尝试将第一个标题列名重命名为任意名称,但它仍然存在问题,因此我想知道访问第一个键是否有问题。tldr;
您正在尝试访问$array['fund']
,而您应该访问$array[0]['fund']
。您将其视为一个一维数组,但它是一个多维数组(维度1,索引;维度2,关联)
说明:
您没有在尝试访问$array['fund']
的位置显示特定代码,也没有显示您的特定输入,但问题似乎是您误解了用于解析CSV的代码的结果数组的结构
array\u map()
+array\u walk()
+array\u combine()
+array\u shift()
获取所需内容似乎有点让人困惑,结果正在显示。这是一个明显的例子,说明“聪明”的代码正在提高生产率。与其他方法相比,双线性数组结构更难解析
我将假设此输入,因为您不提供任何输入,并且读取外部文件超出了此问题的范围(本身并不是问题):
//输入
$lines=Do:$new=[];foreach($k=>$v的数组){$new[trim($k)]=$v;}
之前,检查它是否与新数组一起工作。它应该删除任何不可见的空白(包括CR LF),我试过了,但没有成功。但是,我只是在Excel中打开了CSV文件,并使用逗号分隔值(.CSV)
选项重新保存,而不是使用文件>另存为菜单中的CSV UTF-8(逗号分隔)(.CSV)
选项,结果成功了。我将尝试为遇到此问题的任何其他人更新答案。您的文件中可能有BOM表-了解您需要添加实际使用的代码和有问题的输入文件,至少是这一行。否则我们就只能猜测了。如果你建议的话,为什么var\u dump($array)
不显示多维数组(而是一个assoc数组)。Stefan,我看不到生成数组后使用的代码,也看不到正在使用的输入。但是,如果你转到我链接的示例,你会清楚地看到,这个特定循环的结果是一个包含N个关联数组的索引数组。@Stefan我所做的唯一更改是从多行字符串而不是多行文件中读取。你必须同意没有实际的区别。结果显然是一个N维数组(这是有意义的,因为这将允许您处理包含2条以上记录的CSV;我收集的是目标)。更明显的是,在您自己代码的循环中,您正在访问$array[0]
。所以在您自己的代码中,您知道$array
是索引的,而不是关联的。@StefanDunn现在知道了吗?我进一步编辑了我的答案,使之更加清晰。
$array = array_map('str_getcsv', file($file['tmp_name']));
array_walk($array, function(&$a) use ($array) {
$a = array_combine($array[0], $a);
});
array_shift($array);
array(18) {
["fund"]=>
string(6) "Fund 1"
["name"]=>
string(13) "Property Name"
["investment"]=>
string(13) "Investment Name"
["region"]=>
string(6) "London"
["sector"]=>
string(6) "Office"
["status"]=>
string(8) "Published"
["description"]=>
string(0) ""
["acquisition_date"]=>
string(0) ""
["size"]=>
string(0) ""
["address_line_1"]=>
string(0) ""
["address_line_2"]=>
string(0) ""
["city"]=>
string(6) "London"
["county"]=>
string(0) ""
["postcode"]=>
string(0) ""
["longitude"]=>
string(0) ""
["latitude"]=>
string(0) ""
["featured"]=>
string(0) ""
["external_link"]=>
string(0) ""
}