2012-04-23 107 views
0

我在codeigniter的模型類中編寫'get'函數,但是我需要在返回時處理一些數據,理想情況下沒有一大堆開銷。處理來自查詢的數據

function get_answers($p) 
{ 
    $result = $this->db->get_where('answer', array('a_upid_fk' => $p))->result(); 

    // foreach ($result->answer as $ans) { 
    // $result->answers = explode('|', $ans, -1); 
    // } 

    return $result; 
} 

結果是這樣的:

array (
    0 => 
    stdClass::__set_state(array(
    'aid' => '742', 
    'a_upid_fk' => '231', 
    'answer' => '4555|||', 
    'a_qid_fk' => '70', 
    'created' => '2012-04-20 15:35:38', 
    'last_modified' => '2012-04-20 15:36:11', 
    'revision' => '1', 
)), 
    1 => 
    stdClass::__set_state(array(
    'aid' => '743', 
    'a_upid_fk' => '231', 
    'answer' => NULL, 
    'a_qid_fk' => '71', 
    'created' => '2012-04-20 15:35:38', 
    'last_modified' => '2012-04-20 15:35:38', 
    'revision' => '1', 
)) ... 

問題是存儲爲答案的管道分隔列表中的答案,但我想要的功能,使其恢復爲展開的陣列來代替。我不確定語法以及如何創建和替換或追加數組到我上面粘貼的對象的數組。

你可以看到我一直試圖註釋掉的一些代碼。

理想的情況下,而不是'answer' => '4555|||', 我想有

'answer' => array (
     0 => '4555', 
     1=> '', 
     2=> '') 

我沒有問題,使用explode使得數組,但我不知道如何修改原笨主動記錄結果。

回答

0

環通的子陣:

$answer_array = explode('|', $answer); 
foreach ($aswer_array as $instance) 
{ 
    $result[] = $instance; 
} 

定義__set_state()),使用稱之爲 - $subarray = $result[0][$object->answer]

+0

Hm從來沒有使用__set_state或任何魔術方法。我不清楚我會如何將其應用於我所擁有的。有無限數量的數組爆炸..不需要在循環中? – Damon 2012-04-23 21:06:43

+0

當然,我剛剛顯示了一段可能令人困惑的代碼。所有這些應該在循環內部,只是一個例子。 – 2012-04-23 21:16:00

+0

啊我真的不明白'__set_state'在那裏的作用..它只是在任何codeigniter的原始輸出bc中做的 – Damon 2012-04-24 13:59:16