嗨,我是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'数组/对象吗?
我认为你搞错了。你正在做的是迭代对象的所有变量,即首先你得到公共变量 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)