gpt4 book ai didi

PHP fgetcsv 数组存在逗号分隔问题

转载 作者:行者123 更新时间:2023-11-30 01:31:27 24 4
gpt4 key购买 nike

我的 fgetcsv 命令似乎有问题,而不是逗号分隔,基本上发生的情况是我的数据只是数组中的一个非常长的字符串。我需要数据采用数组格式,以便 implode 函数能够正常工作并上传到 mysql 数据库。

目前 mysql 上传看起来像...

INSERT INTO metars VALUES('PAJZ 011132Z AUTO 1 3/4SM BR FEW009 BKN019 OVC026 08/07 A2959 RMK AO2 PWINO TSNO P0001,PAJZ,2013-07-01T11:32:00Z,59.73,-157.27,8.0,7.0,,,,1.75,29.589567,,,TRUE,TRUE,,,TRUE,,TRUE,BR,FEW,900,BKN,1900,OVC,2600,,,IFR,,,,,,0.01,,,,,,SPECI,82.0"

每个元素周围应该有单引号,但是由于它是一个字符串,因此内爆不起作用 =\

<?php

require_once("../config/dbmetar.php");

$file = "metars.csv";
$db = new mysqli(DB_HOST_METAR, DB_USER_METAR, DB_PASS_METAR, DB_NAME_METAR);
$r = 0;

if (($handle = fopen($file, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 3000, ",", '"')) !== FALSE) {
if ($r >= 6) { //skips the header
foreach($data as $i => $content) {

$data[$i] = $db->real_escape_string($content);

}

//echo "INSERT INTO metars VALUES('" . implode("','", $data) . '"' ;
//echo var_dump($data);
$db->query("INSERT INTO metars VALUES('" . implode("','", $data) . "');");

}
$r++;
}
fclose($handle);
}

?>

这是 csv 文件的示例

No errors
Max results hit (1000): not all possible results returned;
59 ms
data source=metars
948 results
raw_text,station_id,observation_time,latitude,longitude,temp_c,dewpoint_c,wind_dir_degrees,wind_speed_kt,wind_gust_kt,visibility_statute_mi,altim_in_hg,sea_level_pressure_mb,corrected,auto,auto_station,maintenance_indicator_on,no_signal,lightning_sensor_off,freezing_rain_sensor_off,present_weather_sensor_off,wx_string,sky_cover,cloud_base_ft_agl,sky_cover,cloud_base_ft_agl,sky_cover,cloud_base_ft_agl,sky_cover,cloud_base_ft_agl,flight_category,three_hr_pressure_tendency_mb,maxT_c,minT_c,maxT24hr_c,minT24hr_c,precip_in,pcp3hr_in,pcp6hr_in,pcp24hr_in,snow_in,vert_vis_ft,metar_type,elevation_m"
"PAJZ 011132Z AUTO 1 3/4SM BR FEW009 BKN019 OVC026 08/07 A2959 RMK AO2 PWINO TSNO P0001,PAJZ,2013-07-01T11:32:00Z,59.73,-157.27,8.0,7.0,,,,1.75,29.589567,,,TRUE,TRUE,,,TRUE,,TRUE,BR,FEW,900,BKN,1900,OVC,2600,,,IFR,,,,,,0.01,,,,,,SPECI,82.0"
"CYOD 011131Z 18002KT 1/2SM FG FEW250 RMK CI0,CYOD,2013-07-01T11:31:00Z,54.4,-110.28,,,180,2,,0.5,,,,,,,,,,,FG,FEW,25000,,,,,,,LIFR,,,,,,,,,,,,SPECI,544.0"
"CYYD 011131Z AUTO VRB06KT 5SM -RA BR FEW007 BKN070 OVC084 15/14 A3005 RMK PRESRR PCPN 1.0MM PAST HR SLP173 DENSITY ALT 1900FT,CYYD,2013-07-01T11:31:00Z,54.82,-127.18,15.0,14.0,0,6,,5.0,30.050198,1017.3,,TRUE,,,,,,,-RA BR,FEW,700,BKN,7000,OVC,8400,,,MVFR,,,,,,,,,,,,SPECI,523.0"
"KNSE 011131Z 00000KT 10SM -RA FEW025 BKN070 BKN120 BKN250 23/19 A2980 RMK AO2 WSHFT 1045 RAB29 P0000 $ ,KNSE,2013-07-01T11:31:00Z,30.72,-87.02,23.0,19.0,0,0,,10.0,29.799213,,,,TRUE,TRUE,,,,,-RA,FEW,2500,BKN,7000,BKN,12000,BKN,25000,VFR,,,,,,0.0050,,,,,,SPECI,61.0"

我已经尝试解决这个困境大约6个小时了,但没有成功,我尝试了不同的csv拉取方法,例如str_getcsv、fgetcsv,我尝试了foreach和for...简化版本是什么我有以下内容,这是更新标题信息的最简单方法。

目的:这个 php 脚本将在 cron 调度程序中每 60 秒到 150 秒运行一次,如果您对此有任何其他建议,我也将不胜感激。

我非常感谢在这件事上的任何帮助,

谢谢

-米凯尔

最佳答案

您可能需要考虑使用 file() 进行此类操作,这样您就可以删除前几行并删除 CSV 字符串末尾的引号。您传递的 fgetcsv 参数适用于要用引号引起来的每一列,而不是整个字符串。

从那里,您可以使用str_getcsv()

示例(未经测试):

<?php
$file = file("metars.csv");
for($i = 0; $i < 6; $i++) array_shift($file);
foreach($file as $line) {
$line = ltrim($line, '"');
$line = rtrim($line, '"');
$csv = str_getcsv($line);
/** do query, preferably a prepared statement **/
}
?>

当然,如果您的文件很大 - 这可能不是最好的解决方案。

关于PHP fgetcsv 数组存在逗号分隔问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17412001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com