我正在开发一个PHP脚本,根据上传的CSV文件更新一些跟踪号码。导入工作正常一段时间,然后导出开始在值周围有引号。我认为这样会很好,但它开始拒绝文件。做了一些调试和var_dumps,我发现了一个我以前从未见过的非常奇怪的情况 - 一个带有两个索引且具有相同名称的关联数组。我运行了设置字段的代码(如下所示)并添加了一行:
$v['order_id'] = '119205';
运行该行后,var_dump如下:
array(15) {
["order_id"]=>
string(6) "119205"
["Tracking Number"]=>
string(22) "6735675476254654756"
["Postage"]=>
string(4) "1.64"
["order_id"]=>
string(6) "119205"
}
为简洁起见,删除了一些字段。如您所见,有两个["order_id"]
索引。这怎么可能呢?
以下是设置上面转储的数组值的代码:
$v = array();
foreach ($map as $k => $n) {
$v[$n] = @$data[$k];
}
,$map
是CSV标题行。尝试在不运行$v['order_id']
行的情况下引用$v['order_id'] = '119205';
会导致此错误:
Notice: Undefined index: order_id in /dir/to/php/file/php_file.php</b> on line 29
手动设置索引按预期工作,从$v
中提取其余数据,没有问题。
修改
转储array_keys导致:
[0]=>
string(11) "order_id"
和
[14]=>
string(8) "order_id"
使第一个三个字符更长。
var_export仍然导致相同的索引。
我怎样才能摆脱这些看不见的角色?我已经在$v[trim($n)] = @$data[$k];
中尝试了foreach()
。
答案 0 :(得分:3)
试试var_dump(array_keys($v))
。找到看起来像order_id
的密钥,并确保字符串的长度正好是8.我怀疑那里可能有一个NUL字符,这会使它的长度为9并导致它不响应{{1 }}
答案 1 :(得分:0)
引用:
在
var_dump()
的输出中,空字节不可见。
从技术上讲,数组中PHP不能有两倍相同的键。可能是var_dump
没有给出正确的密钥(例如,可能会删除一些空字符或其他不可显示的字符。)
相反,你可能想检查一下,发生了什么:
var_dump(array_keys($data));
也许有帮助,以下是一个相关问题,它可以证明var_dump
何时隐藏某些信息: