Codeigniter-如何将不同大小的数组插入数据库

时间:2017-11-22 12:17:24

标签: php mysql arrays codeigniter

我想在表'项目'中插入数据。我有两个不同大小的数组,它们是

$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);     
}

我的问题是不同大小的数组。如何插入数据库。

1 个答案:

答案 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计数器,只有一次调用数据库。