Arrays 在循环cakephp中组合数组
我正在为我的客户进行一项导入工作,这是一项以100为循环的测试。在每个循环中,我可以保存该客户的阵列,但我认为将每个循环中的阵列组合起来并在达到100时将其全部保存会更快。数据来自csv文件 我想知道的第一件事是什么更好,分别保存每个循环还是在最后一次保存所有循环 我正在创建的arry如下所示:Arrays 在循环cakephp中组合数组,arrays,cakephp,Arrays,Cakephp,我正在为我的客户进行一项导入工作,这是一项以100为循环的测试。在每个循环中,我可以保存该客户的阵列,但我认为将每个循环中的阵列组合起来并在达到100时将其全部保存会更快。数据来自csv文件 我想知道的第一件事是什么更好,分别保存每个循环还是在最后一次保存所有循环 我正在创建的arry如下所示: //Process file if (($handle = fopen('uploads/temp/'.$file, "r")) !== FALSE) while (
//Process file
if (($handle = fopen('uploads/temp/'.$file, "r")) !== FALSE)
while ( (($dop_ar = fgetcsv($handle, 10000, ";")) !== FALSE) && (($_POST['start_id']+1)*100 >= $counter) ) {
if ($_POST['start_id']*100 <= $counter) {
$data_customer = array(
"Customer" => array (
"id" => $dop_ar[0],
"factuurvoornaam" => $dop_ar[12],
"factuurachternaam" => $dop_ar[14]
),
);
$this->Customer->create();
if ($this->Customer->save($data_customer)) {
// handle the success.
//echo 'ok';
}
}
$counter++;
}
//进程文件
if($handle=fopen($uploads/temp/。$file,“r”))!==FALSE)
而(($dop_ar=fgetcsv($handle,10000,“;”))!==FALSE)和($u POST['start_id']+1)*100>=$counter)){
if($\u POST['start\u id']*100数组(
“id”=>$dop_ar[0],
“factuurvoornam”=>$dop_ar[12],
“factuurachternaam”=>$dop_ar[14]
),
);
$this->Customer->create();
如果($this->Customer->save($data\u Customer)){
//把握成功。
//回声‘ok’;
}
}
$counter++;
}
问题是我不知道如何在循环中组合数组,以便在循环结束时达到100时使用saveall。如果我是对的,我必须使用索引,以便cakephp知道他必须插入多个客户
希望有人能帮我找到正确的方向。要一次保存多条记录,只需将它们作为模型别名的数字元素添加到模型数据数组中即可。因此,您的数据如下所示:
$dataToSave = array(
'Customer' => array(
array(
'id' => 54,
'factuurvoornaam' => 'Test',
'factuurachternaam' => '1'
),
array(
'id' => 456,
'factuurvoornaam' => 'Test',
'factuurachternaam' => '2'
),
array(
'id' => 92,
'factuurvoornaam' => 'Test',
'factuurachternaam' => '3'
)
)
);
试试这个:
$customers = array();
if ($handle = fopen('uploads/temp/' . $file, 'r')) {
while ($dop_ar = fgetcsv($handle, 10000, ';')) && (($_POST['start_id'] + 1) * 100 >= $counter)) {
if ($_POST['start_id'] * 100 <= $counter) {
$customers['Customer'][] = array(
'id' => $dop_ar[0],
'factuurvoornaam' => $dop_ar[12],
'factuurachternaam' => $dop_ar[14]
);
}
$counter++;
}
}
if (!empty($customers)) {
$this->Customer->saveAll($customers);
}
$customers=array();
如果($handle=fopen('uploads/temp/'。$file,'r')){
而($dop_ar=fgetcsv($handle,10000,;)&&($u POST['start_id']+1)*100>=$counter)){
如果($\u POST['start\u id']*100$dop\u ar[0],
‘factuurvoornam’=>$dop_ar[12],
‘factuurachternaam’=>$dop_ar[14]
);
}
$counter++;
}
}
如果(!空($customers)){
$this->Customer->saveAll($customers);
}
BadHorsie这是一个小改动。我必须将以下内容更改为:$customers['Customer'][]到$customers[],否则cakephp只执行了回滚,不知道为什么。当插入cakephp时,会使用计数检查每个id,这会减慢进度。我使用$this->Customer->begin();和$this->Customer->commit();现在,但这不是一个大的加速。您对提高数据插入速度有什么建议吗?是的,对不起,我没有测试,只是编写了它。我不知道对速度有什么建议,我想这只是在循环中执行这么多插入的问题。