2014-10-29 2 views
0

내가 당기는하고 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']으로 바뀔 수 있으므로 한 위치에서 변경할 수 있습니다. 한 위치에서 변경 작업을 수행 할 수 있으며 나머지 페이지는 자동으로 업데이트됩니다.

내가 실행 해요 문제는 내가 그것을 가지고 동안 <td>에 꽂혀 variables와 반 가공과 같이이다 : 나는 각 행에 대해 동일한 키와 값을 얻고있다

<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

을 시작하기에 설명을 변경, 그래서 그들은 마지막 반복의 값을 채 끝. 솔루션은 간단하지만 여러 페이지에서이 데이터에 액세스하는 방법을 자세히 설명해야합니다. 대답은 phps'include' 문으로 간단 할 수 있습니다. – Steve

+0

나는 그걸 시도해 봤고 투표를했습니다. 30 초를 읽으면 이해하는 것이 훨씬 쉽습니다. – ValleyDigital

+0

@ 스티브 아, 알 겠어 ... 네, 맞습니다. "data.php"페이지를 만들고 싶습니다. 예를 들어 필요한 모든 스크립트에 '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() 함수의 코드 만 변경하면됩니다.

는이 코드

<?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 
    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(); 

같은 data_parser.php 또는 무언가를 만들기

이 당신이 원하는 무엇인가?

편집 : 귀하의 문제가 변수 (`$ roomNumber, $ occupied` 등) 초기 foreach 루프에서 덮어 쓸 수 있다는 것입니다

+0

[ 'roomNUMBER']이 (가) [ 'roomID']라고 말하면 다른 이름으로 바뀌면 여전히 두 곳에서 수정해야합니다. – ValleyDigital

+0

JSON의 roomNumber가 roomID로 변경되면 매핑에서 변경해야하기 때문에 5 행이됩니다. $ temp [ 'roomNumber'] = $ info [ 'roomID']; 그것이 내가 당신의 문제를 정확하게 이해하는 경우입니다. – fiLLLipnet

+0

오, 당신이 지금하고있는 것을 봅니다. 예, 실제로 작동 할 수 있습니다. 나는 그것을 시도하고 다시 당신에게 돌아갈 것입니다. 고맙습니다. @fiLLipnet – ValleyDigital