循环仅获取最后一个obj

时间:2020-05-10 18:14:14

标签: php

我对此很仁慈

$arr = array("04-12-2020",
    "04-13-2020",
    "04-14-2020",
    "04-15-2020",
    "04-16-2020",
    "04-17-2020",
    "04-18-2020",
    "04-19-2020",
    "04-20-2020",
    "04-21-2020",
    "04-22-2020",
    "04-23-2020",
    "04-24-2020",
    "04-25-2020",
    "04-26-2020",
    "04-27-2020",
    "04-28-2020",
    "04-29-2020",
    "04-30-2020",
    "05-01-2020",
    "05-02-2020",
    "05-03-2020",
    "05-04-2020",
    "05-05-2020",
    "05-06-2020",
    "05-07-2020",
    "05-08-2020",
    "05-09-2020"
);

$datas = [];

foreach($arr as $date) {
    $url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports_us/".$date.".csv";

    if (($handle = fopen($url, "r")) !== FALSE) {
        $csvs = [];
        while($row = fgetcsv($handle)) {
            $csvs[] = $row;
        }
        $column_names = [];
        // Use header line to get array keys
        foreach ($csvs[0] as $single_csv) {
            $column_names[] = $single_csv;
        }
        array_shift($csvs); // remove header line
        foreach ($csvs as $key => $csv) {
            foreach ($column_names as $column_key => $column_name) {
                $datas[$key][$column_name] = $csv[$column_key];
            }
        }
        fclose($handle);
    }
}

$json = json_encode($datas, JSON_PRETTY_PRINT);
print_r($json);

但是当我这样做时:

print_r($json);

我只得到最后的csv数据,而我应该看到所有的数据

1 个答案:

答案 0 :(得分:0)

在循环的下一次迭代之前,您不会在任何地方保存$ datas,因此每次迭代都会覆盖它。

$json = [];

foreach($arr as $date) {
    $url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports_us/".$date.".csv";

    if (($handle = fopen($url, "r")) !== FALSE) {
        $csvs = [];
        while($row = fgetcsv($handle)) {
            $csvs[] = $row;
        }
        $column_names = [];
        // Use header line to get array keys
        foreach ($csvs[0] as $single_csv) {
            $column_names[] = $single_csv;
        }
        array_shift($csvs); // remove header line
        foreach ($csvs as $key => $csv) {
            foreach ($column_names as $column_key => $column_name) {
                $datas[$key][$column_name] = $csv[$column_key];
            }
        }
        $json[] = json_encode($datas, JSON_PRETTY_PRINT);
        fclose($handle);
    }
}

print_r($json);