Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环分批编码点火器_Php_Loops_Codeigniter_Batch Insert - Fatal编程技术网

Php 循环分批编码点火器

Php 循环分批编码点火器,php,loops,codeigniter,batch-insert,Php,Loops,Codeigniter,Batch Insert,我正在使用insert\u batch()函数将数据插入数据库 我想分开这个过程。 我的意思是如果我想创造10000个序列号。但是每次1000行,它应该在一个循环中运行创建进程10次 我该怎么做 $serial_numbers = $this->serial_numbers_model->generate_serial_numbers($product_id, $partner_id, $serial_number_quantity, $serial_number_star

我正在使用
insert\u batch()
函数将数据插入数据库

我想分开这个过程。 我的意思是如果我想创造10000个序列号。但是每次1000行,它应该在一个循环中运行创建进程10次

我该怎么做

    $serial_numbers  = $this->serial_numbers_model->generate_serial_numbers($product_id, $partner_id, $serial_number_quantity, $serial_number_start);
    $issued_date     = date("Y-m-d H:i:s");
    $inserted_rows   = 0;

    foreach ($serial_numbers as $sn) {
        $check_number = $this->serial_numbers_model->generate_check_number();
        $first_serial_number = reset($serial_numbers);
        $last_serial_number = end($serial_numbers);
        $inserted_rows++;

        $insert_data[] = array(
            'partner_id'            => $partner_id,
            'product_id'            => $product_id,
            'check_number'          => $check_number,
            'serial_number'         => $sn,
            'issued_time'           => $issued_date,
            'serial_number_status'  => CREATE_STATUS
        );
    }

    $this->serial_numbers_model->insert_batch($insert_data);
}

可能您的
序列号\u model->insert\u batch()
只是Codeigniter本机的包装?下面的代码使用本机代码,为清晰起见,请根据需要将其替换为您的代码

// Track how many in your batch, and prepare empty batch array
$count = 0;
$insert_data = [];

foreach ($serial_numbers as $sn) {

    // ... your code, prepare your data, etc ...

    $count++;

    $insert_data[] = array(
        // ... your data ...
    );

    // Do you have a batch of 1000 ready?
    if ($count === 1000) {

        // Yes - insert it
        $this->db->insert_batch('table', $insert_data);
        // $this->serial_numbers_model->insert_batch($insert_data);

        // Reset the count, and empty the batch, ready to start again
        $count = 0;
        $insert_data = [];
    }
}

// Watch out!  If there were 1001 serial numbers, the first 1000 were handled, 
// but the last one hasn't been inserted!
if (sizeof($insert_data)) {
    $this->db->insert_batch('table', $insert_data);
}

我的回答有用吗?