【问题标题】:Can't display JSON nested arrays with HTML table and PHP无法使用 HTML 表和 PHP 显示 JSON 嵌套数组
【发布时间】:2021-08-13 20:49:56
【问题描述】:

我正在尝试显示显示每个国家/地区最新疫苗接种数据的表格。我设法拉出国家/地区列表,但无法显示最新数据、接种疫苗总数和每百人接种疫苗总数的嵌套数组。

我想显示total_vaccinationstotal_vaccinations_per_hundred 的数组,其中包含来自date 的最新日期值。

我愿意使用 jQuery 和 Javascript 来完成这项工作。

这是 JSON 数据的一小部分。原始数据在这里:https://raw.githubusercontent.com/owid/covid-19-data/master/public/data/vaccinations/vaccinations.json

Array
(
    [0] => Array
        (
            [country] => Afghanistan
            [iso_code] => AFG
            [data] => Array
                (
                    [0] => Array
                        (
                            [date] => 2021-02-22
                            [total_vaccinations] => 0
                            [people_vaccinated] => 0
                            [total_vaccinations_per_hundred] => 0
                            [people_vaccinated_per_hundred] => 0
                        )

                    [1] => Array
                        (
                            [date] => 2021-02-23
                            [daily_vaccinations] => 1367
                            [daily_vaccinations_per_million] => 35
                        )

                    [2] => Array
                        (
                            [date] => 2021-02-24
                            [daily_vaccinations] => 1367
                            [daily_vaccinations_per_million] => 35
                        )

                    [3] => Array
                        (
                            [date] => 2021-02-25
                            [daily_vaccinations] => 1367
                            [daily_vaccinations_per_million] => 35
                        )

                    [4] => Array
                        (
                            [date] => 2021-02-26
                            [daily_vaccinations] => 1367
                            [daily_vaccinations_per_million] => 35
                        )

                    [5] => Array
                        (
                            [date] => 2021-02-27
                            [daily_vaccinations] => 1367
                            [daily_vaccinations_per_million] => 35
                        )

                    [6] => Array
                        (
                            [date] => 2021-02-28
                            [total_vaccinations] => 8200
                            [people_vaccinated] => 8200
                            [daily_vaccinations] => 1367
                            [total_vaccinations_per_hundred] => 0.02
                            [people_vaccinated_per_hundred] => 0.02
                            [daily_vaccinations_per_million] => 35
                        )

                    [7] => Array
                        (
                            [date] => 2021-03-01
                            [daily_vaccinations] => 1580
                            [daily_vaccinations_per_million] => 41
                        )

                    [8] => Array
                        (
                            [date] => 2021-03-02
                            [daily_vaccinations] => 1794
                            [daily_vaccinations_per_million] => 46
                        )

                    [9] => Array
                        (
                            [date] => 2021-03-03
                            [daily_vaccinations] => 2008
                            [daily_vaccinations_per_million] => 52
                        )

                    [10] => Array
                        (
                            [date] => 2021-03-04
                            [daily_vaccinations] => 2221
                            [daily_vaccinations_per_million] => 57
                        )

                    [11] => Array
                        (
                            [date] => 2021-03-05
                            [daily_vaccinations] => 2435
                            [daily_vaccinations_per_million] => 63
                        )

                    [12] => Array
                        (
                            [date] => 2021-03-06
                            [daily_vaccinations] => 2649
                            [daily_vaccinations_per_million] => 68
                        )

                    [13] => Array
                        (
                            [date] => 2021-03-07
                            [daily_vaccinations] => 2862
                            [daily_vaccinations_per_million] => 74
                        )

                    [14] => Array
                        (
                            [date] => 2021-03-08
                            [daily_vaccinations] => 2862
                            [daily_vaccinations_per_million] => 74
                        )

                    [15] => Array
                        (
                            [date] => 2021-03-09
                            [daily_vaccinations] => 2862
                            [daily_vaccinations_per_million] => 74
                        )

                    [16] => Array
                        (
                            [date] => 2021-03-10
                            [daily_vaccinations] => 2862
                            [daily_vaccinations_per_million] => 74
                        )

                    [17] => Array
                        (
                            [date] => 2021-03-11
                            [daily_vaccinations] => 2862
                            [daily_vaccinations_per_million] => 74
                        )

                    [18] => Array
                        (
                            [date] => 2021-03-12
                            [daily_vaccinations] => 2862
                            [daily_vaccinations_per_million] => 74
                        )

                    [19] => Array
                        (
                            [date] => 2021-03-13
                            [daily_vaccinations] => 2862
                            [daily_vaccinations_per_million] => 74
                        )


HTML/PHP 表格的小片段


    <div class="container my-3 text-center">
      <h2 class="display-6">Vaccine Live Data</h2>
      <table class="table sortable" id="table" data-toggle="table">
        <thead class="table-dark">
          <tr>
            <th scope="col">Countries</th>
            <th scope="col">Last Updated</th>
            <th scope="col">Total vaccinated</th>
            <th scope="col">Total Vaccinated Per Hundred</th>

          </tr>
        </thead>

        <tbody>
          <?php
                        foreach($data as $key => $info){
                    ?>
            <tr>
              <th class="sorttable_nosort">
                <?php echo $info['country']; ?>
              </th>

              <td data-order='desc' data-field="firstdose" data-sortable="true">
                <?php foreach($info['data'] as $key => $value) {  echo $value['date'];
     } ?>
              </td>

            </tr>

            <?php } ?>
        </tbody>



      </table>
    </div>

当前表输出:image here

【问题讨论】:

    标签: php arrays json nested


    【解决方案1】:

    试试这样的,还没有完成。但你可以考虑一下。 基本上,这个脚本采用国家的最后一个数组并显示它,假设这是最后一次更新。可以用js表格排序。

    <div class="container my-3 text-center">
    <h2 class="display-6">Vaccine Live Data</h2>
    <table class="table sortable" id="table" data-toggle="table">
    <thead class="table-dark">
        <tr>
        <th scope="col">Countries</th>
        <th scope="col">Last Updated</th>
        <th scope="col">Total vaccinated</th>
        <th scope="col">Total Vaccinated Per Hundred</th>
        <th scope="col">People Vaccinated Per Hundred</th>
    
        </tr>
    </thead>
    
    <tbody>
        <?php foreach($data as $key => $info){
            $last_array = end($info["data"]);
        ?>
        <tr>
            <td class="sorttable_nosort">
            <?php echo $info['country']; ?>
            </td>
            <td data-order='desc' data-field="firstdose" data-sortable="true">
                <?=$last_array["date"]?>
            </td>
            <td data-order='desc' data-field="firstdose" data-sortable="true">
                <?=$last_array["total_vaccinations"]?>
            </td>
            <td data-order='desc' data-field="firstdose" data-sortable="true">
                <?=$last_array["total_vaccinations_per_hundred"]?>
            </td>
            <td data-order='desc' data-field="firstdose" data-sortable="true">
                <?php
                if($last_array["people_vaccinated_per_hundred"]){
                    echo $last_array["people_vaccinated_per_hundred"];
                }else{
                    echo 'No data available';
                }
                ?>
            </td>
    
        </tr>
    
        <?php } ?>
    </tbody>
    
    
    
    </table>
    

    【讨论】:

    • 您的代码运行良好,但我遇到了Warning: Undefined array key "people_vaccinated_per_hundred" 用于没有people_vaccinated_per_hundred 的数组。如果数组不包含people_vaccinated_per_hundred,如何插入数组的 if 语句以显示“数据不可用”?
    • 不幸的是,if 语句仍然显示相同的错误,但是,我能够使用以下代码解决它:
    • que raro a mi si me funciona,podria ser la version de php。 pero igual tu forma esta correcta!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2019-02-06
    相关资源
    最近更新 更多