具有2个相同名称的关联数组?

时间:2012-08-27 23:02:39

标签: php

我正在开发一个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()

2 个答案:

答案 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何时隐藏某些信息: