PHP数组使用一些操作插入到mysql中

I have MySQL table containing as serials(start,end,quantity,status) .

start-start serial,end-end serial, quantity- difference between start and end, and status is 'R' or 'P'. Suppose I have supplied user 1-1000 R serials, user then enter multiple entries between 1-1000.

I am getting array of serials(sorted) from user as

$arr=array(
array(
'start'=>201,
'end'=>300,
'quantity'=>100),

array(
'start'=>401,
'end'=>600,
'quantity'=>200),

array(
'start'=>701,
'end'=>850,
'quantity'=>150)
)

I want the to insert records in table as

(start,end,quantity,status)

  1. (1,200,200,R)

  2. (201,300,100,P)

  3. (301,400,100,R)

  4. (401,600,200,P)

  5. (601,700,100,R)

  6. (701,850,150,P)

  7. (851,1000,150,R)

What I have tried will only insert 1st and last record of R and all P records but not in between records of R

$this->db->where("md5(serial_id)",$serial_id);
        $dd2=$this->db->get("serial")->row_array();
    $arr=array(
                "start"=>$dd['start_serial_no'],
                "end"=>$ins_arr[0]['start_serial_no']-1,
                'quantity'=>$ins_arr[0]['start_serial_no']-$dd['start_serial_no'],
                'status'=>'R',  

                );
            $this->db->insert('serial',$arr);
    for($i=0;$i<count($ins_arr);$i++)
    {
        $arr=array(
                "start_serial_no"=>$dd['start_serial_no'],
                "end_serial_no"=>$ins_arr[0]['start_serial_no']-1,
                'quantity'=>$ins_arr[0]['start_serial_no']-$dd['start_serial_no'],
                'status'=>'P',  
                );
            $this->db->insert('serial',$arr);

    }
    $arr=array(
                "start_serial_no"=>$ins_arr[$i-1]['start_serial_no'],
                "end_serial_no"=>$dd['end_serial_no'],
                'quantity'=>$ins_arr[$i-1]['start_serial_no']-$dd['start_serial_no'],
                'status'=>'R',  
                );
            $this->db->insert('serial',$arr);

you need to modify it as follows.

$this->db->where("md5(serial_id)",$serial_id);
    $dd2=$this->db->get("serial")->row_array();
$arr=array(
            "start"=>$dd['start_serial_no'],
            "end"=>$ins_arr[0]['start_serial_no']-1,
            'quantity'=>$ins_arr[0] ['start_serial_no']-$dd['start_serial_no'],
            'status'=>'R',  

            );
        $this->db->insert('serial',$arr);
for($i=0;$i<count($ins_arr);$i++)
{
    $p_arr=array(
            "start_serial_no"=>$dd['start_serial_no'],
            "end_serial_no"=>$ins_arr[0]['start_serial_no']-1,
            'quantity'=>$ins_arr[0]['start_serial_no']-$dd['start_serial_no'],
            'status'=>'P',  
            );
        $this->db->insert('serial',$p_arr);

      $r_arr=array(
            "start_serial_no"=>$p_arr['start_serial_no'] + $p_arr['quantity'] ,
            "end_serial_no"=>$p_arr['start_serial_no'] + $p_arr['quantity'] + 100,
            'quantity'=> 100,
            'status'=>'R',  
            );
        $this->db->insert('serial',$r_arr);



}
$arr=array(
            "start_serial_no"=>$ins_arr[$i-1]['start_serial_no'],
            "end_serial_no"=>$dd['end_serial_no'],
            'quantity'=>$ins_arr[$i-1]['start_serial_no']-$dd['start_serial_no'],
            'status'=>'R',  
            );
        $this->db->insert('serial',$arr);

$this->db->insert_batch();

batch insert can be used to insert array that you listed in your question.you can find tutorial here.

https://ellislab.com/codeigniter/user-guide/database/active_record.html

Tough I am accepting shanusingh answer.I did some modifications to that. Answering for anybody else have same issue

    $this->db->where("md5(serial_id)",$serial_id);
    $dd=$this->db->get("serial")->row_array();
    $arr=array(
                "start_serial_no"=>$dd['start_serial_no'],
                "end_serial_no"=>$ins_arr[0]['start_serial_no']-1,
                'quantity'=>$ins_arr[0]['start_serial_no']-$dd['start_serial_no'],
                'status'=>'R',  
                );
            $this->db->insert('serial',$arr);

    for($i=0;$i<count($ins_arr);$i++)
    {
        $p_arr=array(
                "start_serial_no"=>$ins_arr[$i]['start_serial_no'],
                "end_serial_no"=>$ins_arr[$i]['end_serial_no'],
                'quantity'=>$ins_arr[$i]['end_serial_no']-$ins_arr[$i]['start_serial_no']+1,
                'status'=>'P',  
                );
            $this->db->insert('serial',$p_arr);

        if($i!=count($ins_arr)-1)   
        {
             $r_arr=array(
            "start_serial_no"=>$p_arr['end_serial_no']+1,
            "end_serial_no"=>$ins_arr[$i+1]['start_serial_no']-1,
            'quantity'=> $ins_arr[$i+1]['start_serial_no']-$p_arr['end_serial_no']-1,
            'status'=>'R',  
            );

            $this->db->insert('serial',$r_arr);
        }
    }
    $arr=array(
            "start_serial_no"=>$ins_arr[$i-1]['end_serial_no'],
            "end_serial_no"=>$dd['end_serial_no'],
            'quantity'=>$dd['end_serial_no']-$ins_arr[$i-1]['end_serial_no']+1,
            'status'=>'R',  
            );
            $this->db->insert('serial',$arr);