2016-09-21 59 views
0

我返回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

也許我錯了,但不應該循環連續條件使用<運算符嗎? –

回答

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

非常感謝你Tazo ....; } – Teejten

1

您獲得的通知,因爲偏移2真的不存在。您正在尋找偏移2的唯一原因是由於環路條件<=count($output)。計數是2,因此$i將是0,1然後2.您可以通過幾種不同的方法來避免這種情況。在另一個答案中顯示了兩個。另一種方法是用foreach循環代替:

foreach ($output as $person) { 
    $response['person'][] = ['fname' => $output['fname'], 'lname' => $output['lname']]; 
} 
+0

謝謝你的解釋和例子不要恐慌,絕對感謝有用的信息和另一個有效的答案。 – Teejten