1

アップロードされた CSV ファイルに基づいて追跡番号を更新する PHP スクリプトに取り組んでいます。インポートはしばらくの間正常に機能し、その後、エクスポートで値が引用符で囲まれ始めました。これで問題ないと思いましたが、ファイルを拒否し始めました。デバッグと var_dumps を行ったところ、これまでに見たことのない非常に奇妙な状況を発見しました -同じ名前の 2 つのインデックスを持つ連想配列。フィールドを設定するコードを実行し (以下を参照)、次の行を追加しました。

$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"
}

簡潔にするために一部のフィールドを削除しました。ご覧のとおり、2 つの["order_id"]インデックスがあります。これはどのように可能ですか?

上記でダンプした配列の値を設定するコードは次のとおりです。

$v = array();
    foreach ($map as $k => $n) {
    $v[$n] = @$data[$k];
}

$mapCSVヘッダー行です。$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"

最初の文字を3 文字長くします。

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 で同じキーを 2 回持つことはできません。ここで正しいキーを与えていない可能性がありvar_dumpます (たとえば、おそらくいくつかのヌル文字またはその他の表示不可能な文字が削除されます)。

代わりに、何が起こっているのかを確認することをお勧めします。

var_dump(array_keys($data));

var_dump役立つかもしれません。以下は、情報を非表示にするタイミングを示す関連する質問です。

于 2012-08-27T23:09:22.900 に答える