2014-10-29 3 views
0

У меня есть данные в формате JSON Я вытягивать в:Лучший способ для отображения данных в формате 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 и затем показывая $output в мой <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> 

Но моя проблема в том, что у меня есть несколько страниц PHP с помощью этой же таблицы, я хотел бы создать динамический способ установить переменные, и затем вызывать эти переменные в нескольких местах. Моя цель - отредактировать параметры JSON в одном месте и обновить все страницы php, а не обновлять каждый key=>value на нескольких страницах 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> 

делает его немного более динамичным. Поэтому в случае изменения ключа и значений 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 

У вас есть какие-либо идеи о том, как Я могу сделать это более динамичным? Спасибо, что просмотрел мой вопрос. Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще, чтобы помочь мне. Я попытался объяснить это ясно, дайте мне знать, если вам нужно что-нибудь еще.

+0

Ваша проблема в том, что переменные ('$ roomNumber, $ occupied' и т.д.) перезаписываются в вашем начальном цикле Еогеасп, чтобы они в конечном итоге проведение значения из последней итерации. Решение, вероятно, простое, но вам нужно подробно рассказать о том, как вы получаете доступ к этим данным на нескольких страницах. Ответ может быть таким же простым, как заявление phps 'include' – Steve

+0

Я пробовал это до и зашел за него. Это намного легче понять, если вы заработаете 30 секунд, чтобы прочитать его. – ValleyDigital

+0

@Steve ах, я вижу ... Да, вы правы. Я хотел бы создать страницу «data.php» и включить его в каждый скрипт, который мне нужен, например include 'data.php'; – ValleyDigital

ответ

-1

Хотя это не показано в вашем коде, кажется, что вы перебираете элементы во второй раз за пределами первого цикла, который устанавливает переменные таким образом, повторяя начальные заданные значения без фактического «обновления» переменных, соответствующих значениям в этой строке.

Простой цикл, включая декларации переменной и выходной таблицы следует сделать трюк:

<?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 
    } 
?> 
1

Насколько я могу читать, вопрос заключается в том, что вы хотите использовать переменные в нескольких местах, но если Изменения JSON вам нужно только отредактировать в одном центральном месте.

Для этого вы можете использовать сопоставления для отображения переменной в одном месте по локальной переменной по вашему выбору. В строке 5 и так далее в первом коде здесь вы можете выбрать любое имя, которое вы хотите для своего локального массива. Если переменная в 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 
    } 

Является ли это то, что вы хотели?

EDIT: Изменено описание в начало

+0

Если ['roomNUMBER'] изменяется на другое имя, чтобы сказать ['roomID'], тогда мне все равно придется редактировать его в двух местах. – ValleyDigital

+0

Если номер комнаты в JSON изменяется в roomID, вам нужно только изменить это в отображении, так что строка 5 становится: $ temp ['roomNumber'] = $ info ['roomID']; То есть, если я правильно понимаю вашу проблему – fiLLLipnet

+0

Ох, я вижу, что вы сейчас делаете. Да, это может сработать. Я попробую и вернусь к вам. Спасибо @fiLLipnet – ValleyDigital