【问题标题】:Codeigniter- How to insert different sizes of arrays into databaseCodeigniter-如何将不同大小的数组插入数据库
【发布时间】:2018-05-06 04:22:37
【问题描述】:

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

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

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

【问题讨论】:

  • 在上面的示例数据中,您想要的输出(或插入后的表)是什么?
  • 我需要在数据库表中插入两个不同大小的数组
  • 我从您的标题中看到了这一点,但这并不能帮助我们理解实际目标是什么。根据我在上面看到的,您需要 4 个条目,但我不确定您希望 advisor_id 的第 4 个值是什么。
  • 两个数组都是非法格式。它们不能多次包含索引

标签: php mysql arrays codeigniter


【解决方案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 & DONE:没有 for 循环,没有 $i 计数器,只需一次调用数据库。

【讨论】:

  • 感谢您改进代码和精美的文档。非常感谢:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2015-08-30
  • 1970-01-01
相关资源
最近更新 更多