2016-03-22 14 views
0

PHP配列をjsonオブジェクトとして表示する際に問題があります。私はphp forループのデータベースからデータを配列に書きたいので、jsonオブジェクトを作成してjavascriptで使用することができます。forループとしてのJSONの多次元PHP配列

GetJSONを使用してコンソールにデータを記録すると、 'id'のようなデータは表示されませんが、PHPでJSONをエコーし​​たときに表示されます。私の配列がjsonオブジェクトとして動作するかどうかを調べるために、 'name'の値がforループの外側に埋められます。

enter image description here

<script type='text/javascript'> 
    $(document).ready(function(){ 

     $.getJSON('database/getTourInfo.php', function(data) { 
     console.log(data); 
      $.each(data, function(key, val) { 
      console.log(val.show.name); 
      }); 
     }); 

    }); 
    </script> 

これはgetTourInfo.phpです。 forループの外側に配列の値を書き込むと、コンソールに出力されます( 'name'を参照)。しかし、私が以下のようにforループでそれを埋めると、私はそれをエコーするとJSONに現れますが、コンソールには表示されません。

<?php 

header("Content-type: text/javascript"); 

$x = 0; 
$tourInfo = array(); 
$tourInfo_array = array (
    "show"  => array(
      "id" => "", 
      "name" => "Naam1", 
      "date" => "", 
      "support" => "", 
      "festival" => "" 
), 
    "location" => array(
      "latitude" => "", 
      "longitude" => "" 
), 
    "venue"  => array(
      "name" => "", 
      "space" => "", 
      "capacity" => "" 
), 
    "people" => array(
      "attending" => "", 
      "interested" => "" 
)   
); 

$tourdates = json_decode($tourdatesJSON, true); 
foreach($tourdates as $tourdate) { 
    $x++; 

    $event_page_id = $tourdate['ShowEventpage']; 
    $festival  = $tourdate['ShowFestival']; 
    $support  = $tourdate['ShowVoorprogramma']; 

    $tourdates_array[$x]["show"]["id"] = $event_page_id; 
    $tourdates_array[$x]["show"]["support"] = $support; 
    $tourdates_array[$x]["show"]["festival"] = $festival; 

    array_push($tourInfo, $tourInfo_array[$x]); 

} 

$tourInfoJSON = json_encode($tourInfo, JSON_PRETTY_PRINT); 
echo $tourInfoJSON; 
?> 

にはどうすればgetJSONでJSONとしてループして出力それのための私の多次元配列を埋めることができますか?

+3

'$ .getJSON()'は 'Content-Type:application/json'を期待していますか?変数 '$ tourdatesJSON'はどこから来たのですか? – dex

+0

これは、HTMLのに含まれている別のJSONオブジェクトです。コンテンツタイプをapplication/jsonに変更しましたが、結果はありません。 – lottebijl

+0

'$ tourInfo_array [$ x]'は定義されていません - あなたのコードはちょっと混乱しますが、単純化できますか? – dex

答えて

0

これを試しましたか?

header('Content-Type: application/json'); 

echo json_encode($tourInfo, JSON_PRETTY_PRINT); 
0

質問の予想される出力から判断すると、少し間違っていると思います。

これを試してください。

<?php 

$tourdate = array(
    '2016-03-01' => array(
    'ShowEventpage' => '1', 
    'ShowFestival' => 'Isle of Wight', 
    'ShowVoorprogramma' =>'N' 
    ), 
    '2016-04-01' => array(
    'ShowEventpage' => '2', 
    'ShowFestival' => 'V Festival', 
    'ShowVoorprogramma' =>'N' 
    ), 
    '2016-05-01' => array(
    'ShowEventpage' => '3', 
    'ShowFestival' => 'Glastonbury', 
    'ShowVoorprogramma' =>'Y' 
    ), 
    '2016-06-01' => array(
    'ShowEventpage' => '4', 
    'ShowFestival' => '1Xtra', 
    'ShowVoorprogramma' =>'Y' 
    ), 
    '2016-07-01' => array(
    'ShowEventpage' => '5', 
    'ShowFestival' => 'Party in the Park', 
    'ShowVoorprogramma' =>'N' 
    ) 
); 

$tourdatesJSON = json_encode($tourdate); 


$x = 0; 
$tourInfo = array(); 
$tourInfo_array = array (
    "location" => array(
      "latitude" => "", 
      "longitude" => "" 
), 
    "venue"  => array(
      "name" => "", 
      "space" => "", 
      "capacity" => "" 
), 
    "people" => array(
      "attending" => "", 
      "interested" => "" 
)   
); 

$tourdates = json_decode($tourdatesJSON, true); 
$tourdates_array = array(); 

$i = intval(0); 
foreach($tourdates as $date) 
{ //Foreach through list of dates 

    $tourdates_array[] = array(
     'show' => array(
     'id' => $date['ShowEventpage'], 
     'support' => $date['ShowVoorprogramma'], 
     'festival' => $date['ShowFestival'] 
     ), 
     "location" => array(
       "latitude" => "", 
       "longitude" => "" 
     ), 
     "venue"  => array(
       "name" => "", 
       "space" => "", 
       "capacity" => "" 
     ), 
     "people" => array(
       "attending" => "", 
       "interested" => "" 
     ) 
    );  
    $i++; 
} 

$tourInfoJSON = json_encode($tourdates_array, JSON_PRETTY_PRINT); 


header("Content-type: application/json"); 
echo $tourInfoJSON; 
?> 

これはコマンドラインで実行したときの結果です。

[ 
    { 
     "show": { 
      "id": "1", 
      "support": "N", 
      "festival": "Isle of Wight" 
     }, 
     "location": { 
      "latitude": "", 
      "longitude": "" 
     }, 
     "venue": { 
      "name": "", 
      "space": "", 
      "capacity": "" 
     }, 
     "people": { 
      "attending": "", 
      "interested": "" 
     } 
    }, 
    { 
     "show": { 
      "id": "2", 
      "support": "N", 
      "festival": "V Festival" 
     }, 
     "location": { 
      "latitude": "", 
      "longitude": "" 
     }, 
     "venue": { 
      "name": "", 
      "space": "", 
      "capacity": "" 
     }, 
     "people": { 
      "attending": "", 
      "interested": "" 
     } 
    }, 
    { 
     "show": { 
      "id": "3", 
      "support": "Y", 
      "festival": "Glastonbury" 
     }, 
     "location": { 
      "latitude": "", 
      "longitude": "" 
     }, 
     "venue": { 
      "name": "", 
      "space": "", 
      "capacity": "" 
     }, 
     "people": { 
      "attending": "", 
      "interested": "" 
     } 
    }, 
    { 
     "show": { 
      "id": "4", 
      "support": "Y", 
      "festival": "1Xtra" 
     }, 
     "location": { 
      "latitude": "", 
      "longitude": "" 
     }, 
     "venue": { 
      "name": "", 
      "space": "", 
      "capacity": "" 
     }, 
     "people": { 
      "attending": "", 
      "interested": "" 
     } 
    }, 
    { 
     "show": { 
      "id": "5", 
      "support": "N", 
      "festival": "Party in the Park" 
     }, 
     "location": { 
      "latitude": "", 
      "longitude": "" 
     }, 
     "venue": { 
      "name": "", 
      "space": "", 
      "capacity": "" 
     }, 
     "people": { 
      "attending": "", 
      "interested": "" 
     } 
    } 
] 

あなたは何をしていたとの主な問題は、あなたが$tourInfo_array配列を定義し、それに情報を追加しようとしているということでした。だから、そこから配列を出力しようとすると、最初に配列に入れたものはそのまま残り、ループは単に新しい項目を底に追加します。

こちらがお役に立てば幸いです。