gpt4 book ai didi

php - 如何使用 PHP 将 mysql/json 文件转换为 csv 文件

转载 作者:行者123 更新时间:2023-11-29 16:16:53 25 4
gpt4 key购买 nike

我正在通过 JSON 文件收集 Raspberry Pi 上的 ADSB 数据;我正在使用某人的 PHP 代码,该代码从 JSON 文件生成 SQL 数据库。但是,我需要一个 csv 文件来输入我开发的分析程序 (SPSS)。这是创建 sql 数据库的 PHP 代码

    // generate sql insert statement per aircraft in range of user set alt_geom/latitude/longitude and optionally according only to hex or flight numbers in hex_code_array.txt and flight_code_array.txt
#var_dump($hex_code_array); var_dump($flight_code_array); // show arrays for debug
if ($user_set_array['filter_mode_database'] && $user_set_array['filter_mode_database_limited']) {
if (($ac_alt_geom != '' && $ac_alt_geom < $user_set_array['max_alt'] && $ac_lat < $user_set_array['max_lat'] && $ac_lat > $user_set_array['min_lat'] && $ac_lon < $user_set_array['max_lon'] && $ac_lon > $user_set_array['min_lon']) && (func_wildcard_search($ac_hex, $hex_code_array, $user_set_array['filter_mode_wildcard']) || ($ac_flight != '' && func_wildcard_search($ac_flight, $flight_code_array, $user_set_array['filter_mode_wildcard'])))) {
$sql .= "INSERT INTO aircrafts VALUES (NULL, '" . date("Y-m-d G:i:s l", $ac_now) . "', '$ac_now', '$ac_hex', '$ac_flight', '$ac_dist', ";
$sql .= "'$ac_alt_geom', '$ac_lat', '$ac_lon', '$ac_track', '$ac_gs', '$ac_baro_rate', '$ac_seen_pos', '$ac_seen', ";
$sql .= "'$ac_rssi', '$ac_messages', '$ac_category', '$ac_squawk', '$ac_alt_baro', '$ac_mlat', '$ac_tisb', '$message_rate');";
$sql .= PHP_EOL;

当我学习 PHP 时,我改编了一些在 Stack 上其他地方找到的代码,但它没有生成 csv 文件。我的目标是获取创建 sql 数组的变量并不断更新 csv 文件。

 $data= "id,now,hex,flight,distance,altitude,lat,long,track,gs,baro-rate,seen-pos,seen,rasi,messages,category,squark,alt-baro,mlat,tisb,rec-mag-sec\n"; 
$i = 1;
#echo $data;
$data = array(
array( '$i' ),
array( '$ac_id' ),
array( '$ac_now' ),
array( '$ac_hex' ),
array( '$ac_flight' ),
array( '$ac_distance' ),
array( '$ac_alt_geom' ),
array( '$ac_lat' ),
array( '$ac_long' ),
array( '$ac_track' ),
array( '$ac_gs' ),
array( '$ac_baro_rate' ),
array( '$ac_seen_pos' ),
array( '$ac_seen' ),
array( '$ac_rssi' ),
array( '$ac_messages' ),
array( '$ac_category' ),
array( '$ac_squark' ),
array( '$ac_alt_baro' ),
array( '$ac_mlat' ),
array( '$ac_tisb' ),
array( '$ac_rec_mag_sec' ),
);
}
function outputCSV($data) {
$outputBuffer = fopen("php://output", 'w');
foreach($data as $val) {
fputcsv($outputBuffer, $val);
}
fclose($outputBuffer);
}

$filename = 'aircrafts';
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=($filename).csv");
header("Pragama: no-cache");
hwader("Expires: 0");

outputCSV($data);

最佳答案

首先,看起来您正在混合和匹配两种单独的数组处理方法。如果您正在处理以逗号分隔的字符串开头的数据,如下所示:

$data= "1,'2019-2-15 12:00:00','#f6F0C1',1040,345,12500,32.1465,80.1263, ...";

然后你可以将 $data 转换为数组,如下所示:

$data = explode(",", $data);

请注意,执行此操作时,您使用的不是变量名称,而是 csv 中所需的实际原始数据。

但是,如果您的数据来自一堆变量,那么您可以像这样声明数组:

$data= array($i, $ac_id, $ac_now, $ac_hex, $ac_flight, $ac_distance, $ac_alt_geom, $ac_lat ...);

值得注意的是,由于 $data 数组的每个元素只有一个值,因此您不需要将它们创建为数组。另外,因为您想将这些值称为变量,所以您不想将它们放在引号中。如果将它们放在引号中,它们将被计算为字符串而不是变量。

使用上述适当的方法创建名为 $data 的数组后,您需要将其推送到 CSV。这里需要注意的另一件事是,您一次只尝试将一行放入 CSV 中;所以,你根本不需要循环它。当您有一个数组数组,其中每个子数组代表 CSV 文件中的一行时,可以使用循环。由于您一次只执行一行,因此您可以简化代码,如下所示。

function outputCSV($data) {
$outputBuffer = fopen("php://output", 'w');
fputcsv($outputBuffer,$data);
fclose($outputBuffer);
}

关于php - 如何使用 PHP 将 mysql/json 文件转换为 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54711858/

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