2012-04-23 70 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