Codeigniter将数组合并为单个数组

时间:2014-02-27 18:55:58

标签: php mysql sql json codeigniter

我试图在codeigniter中找出这个东西,但因为我是初学者,我在寻找解决方案时遇到了一些麻烦。

我有一个名为tasks的表和另一个名为progress的表。因此,在tasks表中插入了许多任务,并在progress表中插入了这些任务的进度。我使用不同的表来跟踪进度,因为我可能需要稍后跟踪每个任务的进度历史记录。

$all_tasks = $this->task_m->get_by(array('user_id'=> $this->session->userdata('id')));

foreach ($all_tasks as $task) {
    $progress = $this->progress_m->get_by(array('task_id'=> $task->id));

};

所以我要做的是将$task$progress的条目添加到数组中,以便我可以遍历它并一次显示任务的组合结果。

tasks表中有两个条目,$tasks的值为:

array(2) {
  [0]=>
  object(stdClass)#24 (8) {
    ["id"]=>
    string(1) "6"
    ["user_id"]=>
    string(1) "2"
    ["name"]=>
    string(28) "Sample task to do sometihing"
    ["description"]=>
    string(28) "Sample task to do sometihing"
    ["priority"]=>
    string(4) "high"
    ["status"]=>
    string(7) "pending"
    ["created"]=>
    string(19) "2014-02-27 23:26:09"
    ["modified"]=>
    string(19) "2014-02-27 23:26:09"
  }
  [1]=>
  object(stdClass)#25 (8) {
    ["id"]=>
    string(1) "7"
    ["user_id"]=>
    string(1) "2"
    ["name"]=>
    string(13) "Sample task 2"
    ["description"]=>
    string(11) "Sample desc"
    ["priority"]=>
    string(1) "1"
    ["status"]=>
    string(0) ""
    ["created"]=>
    string(19) "2014-02-28 00:20:17"
    ["modified"]=>
    string(19) "2014-02-28 00:20:17"
  }
}

progress表中有两个条目,每个$progress的值为:

array(1) {
  [0]=>
  object(stdClass)#26 (6) {
    ["id"]=>
    string(1) "1"
    ["task_id"]=>
    string(1) "6"
    ["percentage"]=>
    string(2) "68"
    ["description"]=>
    string(17) "About to complete"
    ["created"]=>
    string(19) "2014-02-18 00:00:00"
    ["modified"]=>
    string(19) "2014-02-12 00:00:00"
  }
}

array(1) {
  [0]=>
  object(stdClass)#27 (6) {
    ["id"]=>
    string(1) "2"
    ["task_id"]=>
    string(1) "7"
    ["percentage"]=>
    string(2) "56"
    ["description"]=>
    string(6) "Sample"
    ["created"]=>
    string(19) "2014-02-05 00:00:00"
    ["modified"]=>
    string(19) "2014-02-14 00:00:00"
  }
}

2 个答案:

答案 0 :(得分:1)

你快到了:

$all_tasks = $this->task_m->get_by(array('user_id'=> $this->session->userdata('id')));

foreach ($all_tasks as $task) {
    $task->progress_list = $this->progress_m->get_by(array('task_id'=> $task->id));
};

答案 1 :(得分:0)

为什么不直接使用ActiveRecord连接两个表,运行查询然后你有一个带有所有信息的结果对象?我假设他们共享一个共同密钥正确吗?如果没有,您可能需要重新考虑数据库的布局方式。如果您不想使用ActiveRecord,可以在标准MySQL中编写查询并使用query()方法。