提问人:Danny Beckett 提问时间:4/16/2019 更新时间:4/16/2019 访问量:73
数组中未定义的索引,但它在那里
Undefined index in array but it is there
问:
我有一个名为 .标题列包含在 中。我有一个循环,它进入并覆盖从索引 1 开始的数组中的一些数据。$csv
$csv[0]
$csv
出于某种原因,当我尝试输出时,它不再获得任何值,即使当我执行 时该值就在那里。$csv[1]['CRM ID']
var_export
$csv[1]
我能够很好地读取数据。这与空间有关吗?到目前为止,它一直在工作,直到一段看似无关的第三方代码被更改。$csv[1]['Agency']
// Agency ID - prefix + zerofill
$agency_id_n = strpos($csv[$i]['Agency'], 'A') === 0 ? (int) ltrim($csv[$i]['Agency'], 'A') : (int) $csv[$i]['Agency'];
$csv[$i]['Agency'] = $agency_id_p = 'A' . str_pad($agency_id_n, 5, '0', STR_PAD_LEFT);
// CRM ID - prefix + zerofill
echo "<h1>\$csv :-</h1><pre>" . print_r($csv, true) . "</pre>";
echo "<h1>\$csv[1] :-</h1><pre>" . var_export($csv[1], true) . "</pre>";
echo "<h1>yyyyy = {$csv[1]['CRM ID']} / " . var_export($csv[1]['CRM ID'], true) . "</h1>";
$crm_id_n = strpos($csv[$i]['CRM ID'], 'C') === 0 ? (int) ltrim($csv[$i]['CRM ID'], 'C') : (int) $csv[$i]['CRM ID'];
echo "<h1>has c = " . (strpos($csv[$i]['CRM ID'], 'C') === 0 ? 'yes' : 'no') . "</h1>";
echo "<h1>val = {$csv[$i]['CRM ID']}</h1>";
echo "<h1>y = $crm_id_n</h1>";
die("<h1>csv...</h1><pre>" . print_r($csv, true) . "</pre>");
答:
1赞
Danny Beckett
4/16/2019
#1
罪魁祸首是容易受到字节顺序标记 (BOM) 的影响 - 来自 PHP 手册的评论:fgetcsv
此功能没有特殊的 BOM 处理。第一行的第一个单元格将继承 BOM 字节,即比预期长 3 个字节。由于 BOM 是不可见的,因此您可能不会注意到。
Windows 上的 Excel 或记事本等文本编辑器可能会添加 BOM。
评论
9
CRM ID
不应为 9 个字符。你那里有一些隐藏的角色。.csv
$csv
$csv[0]