I have my code working to some degree as it echo's out my array to a table - but the issue is, it's echoing out all fields.
I want to display just the name, trainer and status fields. I just can't get my head around how to do it.
Array
[{
id: "8001073",
name: "Castarnie",
silk: "c20170311her/00829186.jpg",
cloth_number: "4",
jockey: "Harry Cobden",
trainer: "Robert Walford",
weight_value: "165",
weight_unit: "pounds",
form: "P-2P2PF",
bred: "GB",
last_run: "21",
status: "WINNER"
},
{
id: "7164976",
name: "Try It Sometime",
silk: "c20170311her/00026136.jpg",
cloth_number: "8",
jockey: "Mikey Hamill",
trainer: "Sheila Lewis",
weight_value: "140",
weight_unit: "pounds",
form: "654529",
bred: "IRE",
last_run: "20",
status: "LOSER"
}
]
and the PHP code looks like
<?php if (count($obj) > 0): ?>
<table>
<thead>
<tr>
<th><?php echo implode('</th><th>', array_keys(current($obj))); ?></th>
</tr>
</thead>
<tbody>
<?php foreach ($obj as $row): array_map('htmlentities', $row); ?>
<tr>
<td><?php echo implode('</td><td>', $row); ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
It doesn't make sense to call array_map()
to modify every value in each row with htmlentities
because you are only displaying three of them -- only modify what you are going to display.
Code: (Demo)
$json_data=file_get_contents($api_url);
$objects=json_decode($json_data);
if(is_array($objects) && sizeof($objects)){
echo '<table><thead><tr>';
echo '<th>Name</th><th>Trainer</th><th>Status</th>';
echo '</tr></thead><tbody>';
foreach($objects as $row){
echo '<tr>';
echo '<td>',htmlentities($row->name),'</td>';
echo '<td>',htmlentities($row->trainer),'</td>';
echo '<td>',htmlentities($row->status),'</td>';
echo '</tr>';
}
echo '</tbody></table>';
}else{
echo 'Invalid or empty json data received';
}
Output:
<table>
<thead>
<tr>
<th>Name</th>
<th>Trainer</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>Castarnie</td>
<td>Robert Walford</td>
<td>WINNER</td>
</tr>
<tr>
<td>Try It Sometime</td>
<td>Sheila Lewis</td>
<td>LOSER</td>
</tr>
</tbody>
</table>
$jsondata = file_get_contents($api_url);
$obj = json_decode($jsondata, true);
if (is_array($obj)){
echo "<table>";
echo "<th><td>Name</td><td>Trainer</td><td>Status</td></tr>";
foreach ($obj as $row){
array_map('htmlentities', $row);
echo "<tr>";
echo "<td>".$row["name"]."</td>";
echo "<td>".$row["trainer"]."</td>";
echo "<td>".$row["status"]."</td>";
echo "</tr>";
}
echo "</table>";
}