显示JSON数据的最佳方式


Best way to display JSON data

我正在提取JSON数据:

{
  "apiVersion": "0.1",
  "data": {
    "roomCount": 12,
    "rooms": [
      {
        "roomNumber": "204",
        "occupied": false,
        "permissions": {
          "roomCharges": true,
          "adultContent": true
        }
      },
      {
        "roomNumber": "205",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "206",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "207",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "208",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }
      },
      {
        "roomNumber": "209",
        "occupied": true,
        "permissions": {
          "roomCharges": false,
          "adultContent": false
        }

我可以很好地格式化它。使用JSON_Decode,然后在我的<table>中显示$output,就像这样:

<table>
    <?php foreach($output['data']['rooms'] as $info): ?>
        <tr>
            <td><?php echo $info['roomNumber'] ?></td>
            <td><?php echo ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; ?></td>
            <td><?php echo ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td>
            <td><?php echo ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td> 
            <td><?php echo '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>'?></td>
        </tr>
    <?php endforeach; ?>
</table>

但我的问题是,由于我有多个php页面使用同一个表,我想创建一种动态方式来设置变量,然后在多个位置调用这些变量。我的目标是在一个位置编辑JSON参数,并更新所有php页面,而不是在几个php页面上更新每个key=>value。(类似于将每个设置为一个变量)。

<?php foreach($output['data']['rooms'] as $info){
    $roomNumber = $info['roomNumber'];
    $occupied = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
    $roomCharges = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
    $adultContent = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
    $roomReport = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';
}
?>

在我的表格显示中:

        <tr>
            <td><?php echo $roomNumber ?></td>
            <td><?php echo $occupied ?></td>
            <td><?php echo $roomCharges ?></td>
            <td><?php echo $adultContent ?></td> 
            <td><?php echo $roomReport ?></td>
        </tr>

让它更有活力。因此,如果JSON键和值发生更改,我可以在一个位置更改它们,即['permissions']['adultContent']可能会变成['guestValue']['RoomAuthorized']。我可以在一个位置进行更改,剩下的页面会自动更新。

我遇到的问题是,当我把variables插入<td>时,它处于半工作状态,就像这样:

<tr>
  <td><?php echo $roomNumber ?></td>
  <td><?php echo $occupied ?></td>
  <td><?php echo $roomCharges ?></td>
  <td><?php echo $adultContent ?></td> 
  <td><?php echo $roomReport ?></td>
 </tr>

对于每一行项目,我都得到相同的关键字和值。示例:

204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here
204 VACANT  ENABLED ENABLED Click Here

当我使用原始table时,会正确地返回数据,比如:

table>
        <?php foreach($output['data']['rooms'] as $info): ?>
            <tr>
                <td><?php echo $info['roomNumber'] ?></td>
                <td><?php echo ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; ?></td>
                <td><?php echo ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td>
                <td><?php echo ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; ?></td> 
                <td><?php echo '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>'?></td>
            </tr>
        <?php endforeach; ?>
    </table>

并带回:

204 VACANT      ENABLED     ENABLED     Click Here
205 OCCUPIED    DISABLED    DISABLED    Click Here
206 OCCUPIED    DISABLED    DISABLED    Click Here
207 OCCUPIED    DISABLED    DISABLED    Click Here
208 OCCUPIED    DISABLED    DISABLED    Click Here

你知道我该如何让它更有活力吗?谢谢你检查我的问题。如果你需要其他帮助,请告诉我。我试着解释清楚,如果你需要进一步的帮助,请让我知道。

据我所知,问题是您希望在多个位置重用变量,但如果JSON发生更改,您只需要在一个中心位置对其进行编辑。

为了实现这一点,您可以使用映射将一个地方的变量映射到您选择的局部变量。在第一段代码的第五行,依此类推,您可以为本地数组更改或选择任何需要的名称。如果JSON中的变量发生了变化,只需更改该变量,您的本地映射仍然不变。现在您只需要更改函数get_data_in_my_format()中的代码。

创建一个data_parser.php或类似的

<?php
    function get_data_in_my_format(){
        $input = json_decode('your data here', true);
        $output = array();
        foreach($input['data']['rooms'] as $info){
            $temp['roomNumber'] = $info['roomNumber'];
            $temp['occupied'] = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
            $temp['roomCharges'] = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
            $temp['adultContent'] = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
            $temp['roomReport'] = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';
            $output[] = $temp;
        }
        return $output;
    }
    //Only insert following line if you want to run the function no matter what
    $data_in_my_format = get_data_in_my_format();

在您要使用此代码的文件中

<?php
    include('data_parser.php');
    //If you did not initiate $data_in_my_format in data_parser.php, do it here
    //$data_in_my_format = get_data_in_my_format();
    foreach($data_in_my_format as $room){
        ?>
            <tr>
                <td><?php echo $room['roomNumber'] ?></td>
                <td><?php echo $room['occupied'] ?></td>
                <td><?php echo $room['roomCharges'] ?></td>
                <td><?php echo $room['adultContent'] ?></td> 
                <td><?php echo $room['roomReport'] ?></td>
            </tr>
        <?php
    }

这是你想要的吗?

编辑:更改了开头的描述

虽然它没有在代码中显示,但似乎是在第一个循环之外的第二次循环项目,从而设置变量,重复初始设置值,而没有实际"更新"变量以对应该行中的值。

一个包含变量声明和表输出的简单循环就可以完成任务:

<?php 
    foreach($output['data']['rooms'] as $info){
        $roomNumber = $info['roomNumber'];
        $occupied = ($info['occupied'] == 1) ? 'OCCUPIED' : 'VACANT'; 
        $roomCharges = ($info['permissions']['roomCharges'] == 1) ? 'ENABLED' : 'DISABLED'; 
        $adultContent = ($info['permissions']['adultContent'] == 1) ? 'ENABLED' : 'DISABLED'; 
        $roomReport = '<a class="clickhere" href="display_room_report.php?id=' . $info['roomNumber'] .'">Click Here</a>';
        ?>
        <tr>
           <td><?php echo $roomNumber ?></td>
           <td><?php echo $occupied ?></td>
           <td><?php echo $roomCharges ?></td>
           <td><?php echo $adultContent ?></td> 
           <td><?php echo $roomReport ?></td>
        </tr>
        <?php
    }
?>