我正在使用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);
}
}
答案 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
}
}
希望有所帮助。