另一个未定义的偏移错误

时间:2016-09-21 17:16:42

标签: php

我以正确的格式返回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
        }
    ]
}

2 个答案:

答案 0 :(得分:1)

解决方案1:

这一行之后:

for($i=0; $i<=count($output); $i++) {

只需插入此行:

if(!array_key_exists($i, $output)) continue;

解决方案2:

只需将<=替换为<,如下所示:

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']];
}