我想在表'项目'中插入数据。我有两个不同大小的数组,它们是
$advisor_id = array(
'id' =>1
'id' =>2
'id' =>3
);
$project_id = array(
'pid'=>1
'pid'=>2
'pid'=>3
'pid'=>4
);
我的代码是:
$advisors = count($this->input->post('advisor_id[]'));
$PM_ids = count($this->input->post('PM_id[]'));
if($advisors > $PM_ids){
$count = $advisors;
}else{
$count = $PM_ids;
}
$data[] = array();
for($i =0; $i<$count ; $i++){
$data = array(
'advisor_id' =>$this->input->post('advisor_id')[$i],
'PM_id' =>$this->input->post('PM_id')[$i],
);
//print_r($data);
$this->db->insert_batch('project_config',$data);
}
我的问题是不同大小的数组。如何插入数据库。
答案 0 :(得分:1)
如果您愿意提交失踪的NULL
值,array_map()
是此工作的最佳工具。
首先演示了当数组大小不匹配时如何/在哪里生成NULL
元素......
代码:(Demo)
$advisor_id=['id1'=>1,'id2'=>2,'id3'=>3];
$project_id=['pid1'=>1,'pid2'=>2,'pid3'=>3,'pid4'=>4];
$data=array_map(function($id,$pid){return ['advisor_id'=>$id,'PM_id'=>$pid];},$advisor_id,$project_id);
var_export($data); // see how NULL elements are formed in the output array
输出:
array (
0 =>
array (
'advisor_id' => 1,
'PM_id' => 1,
),
1 =>
array (
'advisor_id' => 2,
'PM_id' => 2,
),
2 =>
array (
'advisor_id' => 3,
'PM_id' => 3,
),
3 =>
array (
'advisor_id' => NULL,
'PM_id' => 4,
),
)
现在,上述多维数组已为单个insert_batch()调用做好充分准备。 重要 CodeIgniter的insert_batch()
专门用于一次性插入多行数据 - 在循环中使用此调用会破坏进行此调用的目的。
至于你的实际实现,这应该工作(我不在CodeIgniter中编码):
$data=array_map(function($id,$pid){return ['advisor_id'=>$id,'PM_id'=>$pid];},$this->input->post('advisor_id'),$this->input->post('PM_id'));
$this->db->insert_batch('project_config',$data);
CLEAN&amp; DONE:No for循环,没有$i
计数器,只有一次调用数据库。