我在访问此数组PHP时遇到问题

时间:2020-01-30 09:29:14

标签: php arrays json

我有JSON https://jsonplaceholder.typicode.com/todos/,我需要将所有数据放在表中。 如何访问“完成”? 我认为那是布尔。我需要一个只打印TRUE的按钮,另一个只打印FALSE的按钮。我尝试了类似的方法,但是没有用。

这就是我尝试过的:PHP代码

<?php } elseif (isset($_POST['onlyCompBtn'])) {?>
   <?php    $data = $_POST['onlyCompBtn']; ?>
   <br></br>
     <table class="table table-striped">
         <tr>
           <th>User ID:</th>
           <th>ID:</th>
           <th>Title:</th>
           <th>Compiled:</th>
         </tr>
    <?php foreach ($arrays as $key => $value)  {    ?>
      <tr>
        <td> </td>
        <td> </td>
        <td></td>
        <td><?php echo $value -> completed['1'] ?></td>   // ['1'] or ['true']  doesn't work
      </tr>
     </table>
  <?php    }?>
<?php } ?>

我收到此错误:“试图访问类型为bool的值的数组偏移量”

有什么建议吗? TIA!

3 个答案:

答案 0 :(得分:1)

如果您查看json completed只是布尔值,而不是数组 ({"userId": 1, "id": 1, "title": "delectus aut autem","completed": false }...)。

更改:

<td><?php echo $value -> completed['1'] ?></td>

收件人:

<td><?php echo ($value->completed ? 'TRUE' : 'FALSE') ?></td>

Udate

如果要过滤结果,可以将条件放置在foreach中,假设您只想显示完整的标题:

<?php foreach ($arrays as $key => $value)  { 
      if ($value->completed) {
         ?><tr>
           <td><?php echo $value->userId ?></td>
           <td><?php echo $value->id ?></td>
           <td><?php echo $value->title ?></td>
           <td><?php echo ($value->completed ? 'TRUE' : 'FALSE') ?></td>
         </tr><?php
      }
   }
?></table>

在这种情况下,您只显示已完成的列,因此打印它的已完成列可能没有意义,并且它的值始终为'TRUE',但我还是保留了它,以防您的过滤器不同。

请注意,</table>应该放在foreach之外。

答案 1 :(得分:0)

设置变量后,请尝试首先使用json_decode($ arrays)解码数据,我相信这是您的问题

答案 2 :(得分:0)

这将起作用:

 <?php foreach ($arrays as $key => $value) {    ?>
        <tr>
          <td><?php echo $value->userId ?> </td>
          <td><?php echo $value->id ?> </td>
          <td><?php echo $value->title ?> </td>
          <td><?php echo $value->completed ? 'Compiled' : 'Not Compiled' ?></td>
        </tr>
      <?php }   ?>