2012-12-07 91 views
0

編輯PHP:返回最後一個JSON對象

感謝在這一切的投入,我在我的問題所以現在修改找到的錯誤。對不起。

我想弄清楚如何返回已呈現的JSON字符串中的最後一個對象。我正在使用的兩個函數:

public function revision($return = false) 
    { 
     $id = $this->input->post('galleryID'); 
     $data = array('revision_count' => $this->revision->count_revision($id)); 

     if($return){ 
      return json_encode($data); 
     } 
     else { 
      echo json_encode($data); 
     } 
    } 

public function last_revision() 
     { 
      $allRevisions = json_decode($this->revision(),true); 
      return end($allRevisions); 
     } 

問題是,end()返回錯誤,指出第一個參數應該是數組。

感謝您的任何幫助。

+1

'edit_revision'不返回任何東西,它輸出JSON編碼陣列'$ data'。 – Musa

回答

1

這裏需要注意的是json_decode返回一個ins stdClass默認情況下。嘗試使用json_decode($jsonstring, true)將JSON作爲PHP關聯數組返回。

但是,您沒有包括什麼$this->revision()方法。你可能會顯示那部分代碼,因爲這是你從中獲得返回值的函數嗎?

編輯:

好了,以後我們看到在你的代碼右邊的功能,這裏有幾件事情我想說:

  • 您已經添加了一個$返回參數您revision方法,但是當你需要的時候你並沒有使用它。您應該在last_revision方法中將$this->revision()更改爲$this->revision(true)
  • 如果您要從revision()方法中返回數據,則json_encode中的點數不會太多,只需要json_decode的結果即可。只需傳回原始數據數組。
  • 一旦你已經改變了這兩個東西,這應該工作:

    $allRevisions = $this->revision(true); return end($allRevisions['revision_count']);

+0

謝謝,我修改了我的問題,您的評論幫助我發現了原始問題中的錯誤。 – Bungdaddy

+0

感謝科林 - 很好的解釋,並再次抱歉在我的原始問題混亂。 – Bungdaddy

+0

沒問題,很高興它爲你工作! –

1

可以更改edit_function()到:

public function edit_revision($return = false) 
{ 
    $galleryID = $this->input->post('galleryID'); 
    $revisionID = $this->input->post('revisionID'); 

    $data = array('revision_images' => $this->revision->get($galleryID, $revisionID)); 

    if($return) 
    return json_encode($data); 
    else 
    echo json_encode($data); 
} 

然後:

public function last_revision(true) 
{ 
    $allRevisions = json_decode($this->revision()); 

    return end($allRevisions); 
} 
+0

感謝您對此的幫助。 $ allRevisions不作爲數組返回,因此end()拋出錯誤。 – Bungdaddy

+0

看到我最後一次編輯,只需將參數'true'添加到last_revision調用。 –

+0

謝謝,這並沒有做到這一點,即使我設置$ return = true,我仍然得到end()參數1不是數組。 – Bungdaddy

0

也許你需要的是JSON輸出轉換成PHP數組(json_decode()函數),那麼你可以用array_pop()函數得到最後一項: https://php.net/array_pop