将数组与db进行比较,并将差异添加到db

时间:2016-01-07 23:32:51

标签: php codeigniter

我正在使用codeigniter。

我试图将表单中的某些发布值与数据库中的条目进行比较。

简单地说,我想检查条目是否已经在数据库中,如果是,则忽略发布的数据,但如果没有数据库条目则添加到数据库。

我的想法是,它实际上不应该那么难,但有一些问题,现在我完全糊涂了。任何指向正确方向的人都会受到赞赏。

我有一个来自POST $assigned_ids

的数组

我想将其与来自数据库的$assign_data数据进行比较。

我一直在尝试使用foreach循环,循环遍历已发布的数据,然后循环遍历数据库,并在必要时进行比较和添加。

它可以达到一定程度,但是如果有来自数据库的数据,则会添加多个entires。

继承我的代码,肯定是因为复杂的事情?

        // posted values foreach - loop through all posted values
    foreach($assigned_ids as $id) {

        if(is_array($assign_data) && count($assign_data) > 0) {

            // query all data in assignments table      
            foreach($assign_data as $key => $value) {

                // is the user id from assignments table in posted id's
                if(in_array($value->user_id, $id)){

                    // if it is, then do the course id's match as well? if so, do nothing, already an entry
                    if($value->course_id == $course_id) {

                        echo "match id and course, do nothing";

                    } else {

                        // else if there isnt an entry for this user for this course, add the entry

                        $add_data = array(
                           'user_id' => $value->user_id,
                           'course_id' => $course_id,
                           'org_id' => $org_id
                        ); 

                        $this->assignment_model->save_org_assignments($add_data);               

                    }
                }  else {


                    // the user id was not in the array from the db, but was in the posted vars, so log in db
                    $add_data = array(
                       'user_id' => $id,
                       'course_id' => $course_id,
                       'org_id' => $org_id
                    ); 

                    $this->assignment_model->save_org_assignments($add_data);                       


                }               
            }
        } else {

            $add_data = array(
               'user_id' => $id,
               'course_id' => $course_id,
               'org_id' => $org_id
            ); 

            $this->assignment_model->save_org_assignments($add_data);               
        }
    }

1 个答案:

答案 0 :(得分:0)

我认为您的主要问题是您的阵列结构不正确,这就是您遇到困难的原因。 我的意见是在获取数据库结果后预先定义它。

function getAssignedData(){
   // its better to get the only field you'll need than to fetch everything
   $result = $this->db->select($field)->get();
   if($result->num_rows()){
      $existing_ids = [];
      foreach($result->result() as $row){
         $existing_ids[] = $row->$field;
      }
      return array_flip($existing_ids);
   }
return FALSE;

}

你可以比较像这样的值

foreach($assigned_ids as $id)
{
  if(!isset($existing_ids[$id])) {
    // do something
  }
}

希望有所帮助。