我只需要显示JSON编码对象的一部分

BLe*_*v80 6 php json object

嗨,我是PHP的新手,但已经成功地满足了我的要求:

我试图只显示JSON解码对象的一部分.我打电话给对象$Results.

我可以成功使用var_dump ($Results);,然后得到如下的完整结果:

object(stdClass)[2]
  public '0' => 
    object(stdClass)[3]
      public 'forename_1' => string 'JAMES' (length=5)
      public 'middle1_1' => string '' (length=0)
      public 'middle2_1' => string '' (length=0)
      public 'middle3_1' => string '' (length=0)
      public 'surname_1' => string 'TURNER' (length=7)      
  public 'Status' => int 100
Run Code Online (Sandbox Code Playgroud)

然后我使用以下代码将其插入表中:

<html>
<form id="client-details" action="/details.php" method="post">
  <table>
    <thead>
        <tr> 
            <th>First Name</th>
            <th>Surname</th>
             <th>Search</th>  
        </tr>
     </thead>
<?php foreach($Results as $o):?>
<tr>
  <td id="forename"><?= $o->forename_1 ?></td>
  <td id="surname"><?= $o->surname_1 ?></td>
  <td><button type="submit" >More Info</button></td>
</tr>
<?php endforeach; ?>
</table></form>
</html>
Run Code Online (Sandbox Code Playgroud)

继承人问题 当我显示结果时,我收到以下错误:"注意:试图获取非对象的属性.."

这似乎是因为我试图运行public 'Status' => int 100对象的一部分.

所以我的问题是:如何阻止表格尝试填充"状态"或如何完全忽略它?

编辑:如果我想,我可以从json_decode作为关联数组而不是作为对象获得结果...这会帮助我忽略'status'数组/对象吗?

Eri*_*jak 3

我认为你搞错了。你正在做的是迭代对象的所有变量,即首先你得到公共变量 0 (它也是一个对象),在 foreach 语句的第二次运行中你得到变量 Status 并且因为 'Status' 的值是 int 并且没有名为“forename_1”的属性,因此您会收到该属性不存在的错误。

如果您确实希望此功能起作用,则必须更改 JSON 对象的结构,以便可以迭代要显示的人员列表,例如:

object(stdClass)[2]
  public 'list' => 
    array(0 => 
        object(stdClass)[3]
          public 'forename_1' => string 'JAMES' (length=5)
          public 'middle1_1' => string '' (length=0)
          public 'middle2_1' => string '' (length=0)
          public 'middle3_1' => string '' (length=0)
          public 'surname_1' => string 'TURNER' (length=7)      
          public 'Status' => int 100,
        1 => 
        object(stdClass)[3]
          public 'forename_1' => string 'JAMES' (length=5)
          public 'middle1_1' => string '' (length=0)
          public 'middle2_1' => string '' (length=0)
          public 'middle3_1' => string '' (length=0)
          public 'surname_1' => string 'TURNER' (length=7)      
          public 'Status' => int 100,
        2 => 
        object(stdClass)[3]
          public 'forename_1' => string 'JAMES' (length=5)
          public 'middle1_1' => string '' (length=0)
          public 'middle2_1' => string '' (length=0)
          public 'middle3_1' => string '' (length=0)
          public 'surname_1' => string 'TURNER' (length=7)      
          public 'Status' => int 100
    )
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您无法或不想更改数据结构,则将函数调用 json_decode 的结果作为关联数组获取,然后在 foreach 语句中检查所需字段是否存在:

$Result = json_decode($data, true);

<?php foreach($Results as $o):?>
    <?php if(isset($o['forename_1']) && isset($o['surname_1'])): ?>
        <tr>
          <td id="forename"><?= $o['forename_1'] ?></td>
          <td id="surname"><?= $o['surname_1'] ?></td>
          <td><button type="submit" >More Info</button></td>
        </tr>
    <?php endif; ?>
<?php endforeach; ?>
Run Code Online (Sandbox Code Playgroud)