【发布时间】:2019-07-12 13:41:23
【问题描述】:
我有一个使用 str_getcsv() 创建的数组:
$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 从var_dump($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) ""
}
当我尝试访问$array['fund']; 时,我得到Notice: Undefined index: fund。我的第一个想法是 fund 在 CSV 标头的键名中有一个隐藏字符,因为 $array['name'] 有效,但我已经检查过,唯一的隐藏字符是 CR LF。
我在 StackOverflow 上看到过类似的多维数组问题,但不是单维数组。
任何帮助将不胜感激。我什至尝试过转换为 StdClass 和 $array->fund 并收到关于属性不存在的类似错误。
我尝试将第一个标题列名称重命名为任何名称,但仍然存在问题,所以我想知道访问第一个键是否有问题。
【问题讨论】:
-
Do:
$new = []; foreach ($array as $k => $v) { $new[trim($k)] = $v; }before 并检查它是否适用于新数组。它应该删除所有不可见的空格(包括 CR LF) -
我试过了,但没有用。但是,我刚刚在 Excel 中打开了 CSV 文件,并使用
Comma Separated Vales (.csv)选项而不是file > save as菜单中的CSV UTF-8 (Comma Delimited) (.csv)选项重新保存,它工作正常。我会尝试为遇到此问题的其他人更新答案。 -
您的文件中可能有 BOM - 请阅读 stackoverflow.com/questions/45240387/…
-
您需要添加您实际使用的代码,以及有问题的输入文件,至少该行。否则我们只能猜测。
标签: php arrays undefined-index