Рассмотрим следующий фрагмент данных CSV из «NASDAQ.csv»Импорт CSV данных в MySQL
"Symbol,""Name"",""LastSale"",""MarketCap"",""ADR TSO"",""IPOyear"",""Sector"",""industry"",""Summary Quote"",";;
"FLWS,""1-800 FLOWERS.COM, Inc."",""2.9"",""81745200"",""n/a"",""1999"",""Consumer Services"",""Other Specialty Stores"",""http://www.nasdaq.com/symbol/flws"",";;
"FCTY,""1st Century Bancshares, Inc"",""4"",""36172000"",""n/a"",""n/a"",""Finance"",""Major Banks"",""http://www.nasdaq.com/symbol/fcty"",";;
"FCCY,""1st Constitution Bancorp (NJ)"",""8.8999"",""44908895.4"",""n/a"",""n/a"",""Finance"",""Savings Institutions"",""http://www.nasdaq.com/symbol/fccy"",";;
Я пытаюсь импортировать символ, сектор и промышленность в таблицу MySQL с соответствующими полями:
$path = "NASDAQ.csv";
$row = 1;
if (($handle = fopen($path, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$row++;
$entries[] = $data ;
}
fclose($handle);
}
foreach ($entries as $line) {
db_query("
INSERT INTO us_stocks (symbol, name, sector, industry)
VALUES ('%s', '%s', '%s', '%s', '%s')",
$line[0], $line[1], $line[6], $line[7]
);
}
Результат, однако, не то, что я ожидал. В базе данных заполняется только поле «Символ» и даже не корректно:
symbol name sector industry
----------------------------------
Symbol,"Na
FLWS,"1-80
FCTY,"1st
FCCY,"1st
Что я делаю неправильно?
[править]
Если я print_r ($ записей), результат выглядит
Array (
[0] => Array(
[0] => Symbol,"Name","LastSale","MarketCap","ADR TSO","IPOyear","Sector","industry","Summary Quote",;;
)
[1] => Array(
[0] => FLWS,"1-800 FLOWERS.COM, Inc.","2.9","81745200","n/a","1999","Consumer Services","Other Specialty Stores","http://www.nasdaq.com/symbol/flws",;;
)
[2] => Array(
[0] => FCTY,"1st Century Bancshares, Inc","4","36172000","n/a","n/a","Finance","Major Banks","http://www.nasdaq.com/symbol/fcty",;;
)
)
[edit2]
Я удалил первую строку CSV, как это было предложено. Теперь у меня очень быстрый и грязный способ почти выполнить то, что я хочу. В принципе, эта вещь испортится всякий раз, когда в ней есть название компании с «, Inc». Поэтому я просто «приклеиваю» его к названию выше: $ data [1] = $ data [1]. $ данных [2]:
$path = "NASDAQ.csv";
$row = 1;
if (($handle = fopen($path, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ";;")) !== FALSE) {
if ($row < 100) {
$row++;
$data = explode(',', $data[0]);
if (substr($data[2], 0, 1) == ' ') {
$data[1] = $data[1] . $data[2];
unset($data[2]);
}
$entries[] = $data ;
}
}
fclose($handle);
}
print_r ($ записей) теперь дает:
[0] => Array
(
[0] => FLWS
[1] => "1-800 FLOWERS.COM Inc."
[3] => "2.9"
[4] => "81745200"
[5] => "n/a"
[6] => "1999"
[7] => "Consumer Services"
[8] => "Other Specialty Stores"
[9] => "http://www.nasdaq.com/symbol/flws"
[10] =>
)
Заключительная проблема: я не знаю, как пронумеровать ключи. Таким образом, 3 в 2, 4 в 3, и т.д., так что выход выглядит следующим образом:
[0] => Array
(
[0] => FLWS
[1] => "1-800 FLOWERS.COM Inc."
[2] => "2.9"
[3] => "81745200"
[4] => "n/a"
[5] => "1999"
[6] => "Consumer Services"
[7] => "Other Specialty Stores"
[8] => "http://www.nasdaq.com/symbol/flws"
[9] =>
)
Любая помощь будет принята с благодарностью!
Я предположил бы, что он должен d o с двойными кавычками, используемыми в вашем CSV-файле. Четвертый аргумент 'fgetcsv()' ('$ enclosure') можно установить в' '\" \ "" ', чтобы убедиться, что это так. – Crontab