1

我正在编写一个 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().

4

2 回答 2

3

试试var_dump(array_keys($v))。找到看起来像的键order_id并确保字符串的长度正好是 8。我怀疑那里可能有一个 NUL 字符,这会使它的长度为 9 并导致它不响应order_id.

于 2012-08-27T23:06:01.553 回答
0

引用:

在 的输出中var_dump(),空字节不可见。

从技术上讲,您不能在数组中的 PHP 中有两次相同的键。可能是var_dump这里没有给出正确的键(例如,可能删除了一些空字符或其他不可显示的字符)。

相反,您可能想检查发生了什么:

var_dump(array_keys($data));

也许它有帮助,以下是一个相关的问题,它演示了何时var_dump隐藏一些信息:

于 2012-08-27T23:09:22.900 回答