DopeAt
DopeAt

Reputation: 451

Display json content in php table

I am trying to display json content in php table but I'm getting error every time. I have some syntax error and cant figure out what should i change?

PS. Trying built it with Slim framework

Here is my code:

<div class="data-table-wrapper">
<?php
    $myData = file_get_contents("http://ergast.com/api/f1/current.json");
    $myObject = json_decode($myData);
?>
    <table class="data-table">
        <thead>
            <tr>
                <td>Date</td>
                <td>Time</td>
                <td>Round</td>
                <td>Circuit</td>
                <td>Location</td>
            </tr>
        </thead>
        <?PHP
        foreach($myObject as $key=>$item);
        ?>
        <tr>
            <td><?PHP echo $item->Date; ?></td>
            <td><?PHP echo $item->Time; ?></td>
            <td><?PHP echo $item->Round; ?></td>
            <td><?PHP echo $item->Circuit; ?></td>
            <td><?PHP echo $item->Location; ?></td>
        </tr>
        <?PHP
            }
        ?>
    </table>
</div>

My error is:

Notice: Undefined property: stdClass::$Date in C:\xampp\htdocs\challenge\app\view\challenge.php on line 38

Notice: Undefined property: stdClass::$Time in C:\xampp\htdocs\challenge\app\view\challenge.php on line 39

Notice: Undefined property: stdClass::$Round in C:\xampp\htdocs\challenge\app\view\challenge.php on line 40

Notice: Undefined property: stdClass::$Circuit in C:\xampp\htdocs\challenge\app\view\challenge.php on line 41

Upvotes: 0

Views: 5565

Answers (2)

jagmitg
jagmitg

Reputation: 4566

I have just looked at your json format in comparison to the code. The path mapping to the json is incorrect. I have rectified that below;

Please review the following:

PHP code:

$myData = file_get_contents("http://ergast.com/api/f1/current.json");
$myObject = json_decode($myData);
$myObjectMap = $myObject->MRData->RaceTable->Races;

For each format:

  <?php foreach($myObjectMap as $key => $item): ?>
    <tr>
      <td><?PHP echo $item->date; ?></td>
      <td><?PHP echo $item->time; ?></td>
      <td><?PHP echo $item->round; ?></td>
      <td><?PHP echo $item->Circuit->circuitId; ?></td>
      <td><?PHP echo $item->Circuit->Location->country; ?></td>
    </tr>
  <?php endforeach; ?>

Full Code:

<html>
<head>
  <title>PHP</title>
</head>
<body>
  <?php
    $myData = file_get_contents("http://ergast.com/api/f1/current.json");
    $myObject = json_decode($myData);
    $myObjectMap = $myObject->MRData->RaceTable->Races;
  ?>
  <table>
    <thead>
      <tr>
        <td>Date</td>
        <td>Time</td>
        <td>Round</td>
        <td>Circuit</td>
        <td>Location</td>
      </tr>
    </thead>
    <tbody>
      <?php foreach($myObjectMap as $key => $item): ?>
        <tr>
          <td><?PHP echo $item->date; ?></td>
          <td><?PHP echo $item->time; ?></td>
          <td><?PHP echo $item->round; ?></td>
          <td><?PHP echo $item->Circuit->circuitId; ?></td>
          <td><?PHP echo $item->Circuit->Location->country; ?></td>
        </tr>
      <?php endforeach; ?>
    </tbody>
  </table>

</body>
</html>

Upvotes: 6

ConstantineUA
ConstantineUA

Reputation: 1051

The problem is that decoded array looks differently. Dump your encoded array before the loop to understand the right data structure or use JSON beautify service. Also use the right upper/lowercase to address properties. Updated loop may look like this:

<div class="data-table-wrapper">
<?php
$myData = file_get_contents("http://ergast.com/api/f1/current.json");
$myObject = json_decode($myData);

?>
   <table class="data-table">
   <thead>
    <tr>
     <td>Date</td>
      <td>Time</td>
      <td>Round</td>
      <td>Circuit</td>
      <td>Location</td>
    </tr>
    <?PHP
    foreach($myObject->MRData->RaceTable->Races as $key=>$item){
    ?>
  <tr>
    <td><?PHP echo $item->date; ?></td>
    <td><?PHP echo $item->time; ?></td>
    <td><?PHP echo $item->round; ?></td>
    <td><?PHP echo $item->Circuit->circuitName; ?></td>
    <td><?PHP echo $item->Circuit->Location->locality; ?></td>
  </tr>
 <?PHP
   }
 ?>
   </table>
       </div>
        </div>

Upvotes: 0

Related Questions