0

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; ?>
2
  • Your PHP function that generates that array please. Commented Mar 11, 2017 at 15:35
  • It comes from a json api $jsondata = file_get_contents($api_url); $obj = json_decode($jsondata, true); Commented Mar 11, 2017 at 15:36

2 Answers 2

1
$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>";
}
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks for taking the time! it's really appreciated. It's getting a 500 error though?
was missing a semicolon on second line, fixed in post
Please fix the XSS with htmlspecialchars for instance php.net/manual/en/function.htmlspecialchars.php
0

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>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.