我以正确的格式返回JSON,但我得到了
注意:未定义的偏移量2
当我访问该页面时。昨晚我花了整个时间试图解决这个问题,我可以让错误消失,但后来我只得到一行数据而不是所有数据。我试图将密钥名称更改为数字,仍然无法使其工作。
#part of a factory pattern thats called by getIt()
public function selectAll($where='')
{
$stmt = $this->dbc->prepare("SELECT * FROM {$where}");
$stmt->execute();
$this->results = $stmt->fetchAll();
return $this;
}
#cheap-api.php
$output = $work->getIt('person')->results();
for($i=0; $i<=count($output); $i++) {
$response['person'][$i] = [];
$response['person'][$i]['fname'] = $output[$i]['fname'];
$response['person'][$i]['lname'] = $output[$i]['lname'];
}
print_r(json_encode($response, JSON_PRETTY_PRINT));
这是输出:
{
"person": [
{
"fname": "mitthe",
"lname": "mormon"
},
{
"fname": "jambi",
"lname": "myeyes"
},
{
"fname": null,
"lname": null
}
]
}
答案 0 :(得分:1)
这一行之后:
for($i=0; $i<=count($output); $i++) {
只需插入此行:
if(!array_key_exists($i, $output)) continue;
只需将<=
替换为<
,如下所示:
for($i=0; $i<count($output); $i++) {
答案 1 :(得分:1)
您正在收到通知,因为偏移量2确实不存在。您查找偏移量2的唯一原因是因为循环条件<=count($output)
。计数为2,因此$i
将为0,1,然后是2.您可以通过几种不同的方式避免这种情况。另外两个答案显示了两个。另一种方法是改为使用foreach
循环:
foreach ($output as $person) {
$response['person'][] = ['fname' => $output['fname'], 'lname' => $output['lname']];
}