在CodeIgniter中从foreach创建一个新数组

时间:2017-10-02 19:56:39

标签: php arrays codeigniter

我是一个完整的CodeIgniter菜鸟。我正在尝试更新来自foreach循环的数据库中的一些项目。

foreach($transfer_lists as $lists) {
   $this->db->from('tasks');
   $this->db->where('task_list_id', $lists['list_id']);
   $transfer_lists_check=$this->db->get()->result_array();      

   $transfer_new = array_shift($transfer_lists_check);

   $new_array = array(
      'task_id'           => $transfer_new['task_id'],
      'task_project_id'   => $new_project_id
   );
}

$this->db->update_batch('tasks', $new_array, 'task_list_id'); 

我新创建的数组只返回一个数组项。它应该返回3,因为数据库中有多少具有该特定list_id的数据。

从代码中可以看出,我正在尝试使用预设的$ project_id批量更新特定任务,因此我需要数组。

我正试图找到一个解决方案,但是我还没有找到类似的东西,或者只是我不知道如何搜索:/

更新

在与下面的@ akshay-hedge交谈之后,我开始意识到我试图在一个'foreach'循环中获得3个结果,只有1个参考。

解决方案:在'foreach'中包含另一个'foreach'以根据需要构建我的数组。

以下更新的代码:

foreach($transfer_lists as $lists) {
   $this->db->from('tasks');
   $this->db->where('task_list_id', $lists['list_id']);
   $tasks_found=$this->db->get()->result_array();       

        // Solution to get the desired Array I was looking for
        foreach($tasks_found as $tasks) {
            $new_array[] = array(
                'task_id'           => $tasks['task_id'],
                'task_project_id'   => $new_project_id
            );
        }

}

$this->db->update_batch('tasks', $new_array, 'task_list_id'); 

更新2

之后,一些更多的交谈,@ akshay-hedge建议另一个解决方案,不使用任何'foreach',通过从'task_list_id'开始构建一个数组,我最初。

请检查下面接受的答案以获得解决方案。

1 个答案:

答案 0 :(得分:1)

你有一些小问题要解决:

$new_array = array( .. ) - 这样你就可以在每次迭代中覆盖数组

$new_array[] = array( .. ) - 这样你就可以在每次迭代中向数组($new_array)添加新元素。

所以修改你的代码

发件人

 $new_array = array(
      'task_id'           => $transfer_new['task_id'],
      'task_project_id'   => $new_project_id
   );

 $new_array[] = array(
      'task_id'           => $transfer_new['task_id'],
      'task_project_id'   => $new_project_id
   );

由于您获得了list_ids的列表,因此可以使用where_in

$new_array = $this->db->select("'$new_project_id' as task_project_id,task_id",FALSE)
->where_in('task_list_id', array_column($transfer_lists,'list_id'))
->from('tasks')
->get()
->result_array();