我有一个数组,可以容纳数千个项目。(通常约5000项)。 我需要将此数组拆分为数百个并处理它们,然后继续其余项目。 到目前为止我处理整个阵列很慢。 我的代码是
foreach($result as $p){
$sqlQuery = mysql_query("INSERT INTO message_details(contact, message_id)VALUES('$p', $message_last_id)");
$last_id = mysql_insert_id();
$xmlString .= "<gsm messageId=\"$last_id\">".$p."</gsm>";
$cnt++;
}
如何处理数百个数组中的项目?例如。 100,然后200,然后300等
最诚挚的问候, 尼科斯
答案 0 :(得分:3)
也许你可以这样试试:
首先选择message_details的最后一个ID。
$sqlQuery = mysql_query("SELECT %last_id_col_name% FROM message_details ORDER BY %last_id_col_name% DESC LIMIT 1".$sInserts);
然后:
$sInserts = '';
foreach($result as $p){
$sInserts .= "('{$p}', {$message_last_id}),";
}
//Remove last "," from Insert-String
$sInserts = substr($sInserts,0,-1);
//Insert all with one query
$sqlQuery = mysql_query("INSERT INTO message_details(contact, message_id)VALUES".$sInserts);
然后从该表中选择所有条目,其中id大于您首先选择的条目 并写信给
$xmlString .= '<gsm messageId="'.$last_id.'">'.$p.'</gsm>';
如果你这样做,你只需要3个DB-Queries,而不是数千个。
答案 1 :(得分:2)
foreach($result as $p){
$sqlQuery = mysql_query("INSERT INTO message_details(contact, message_id)VALUES('$p', $message_last_id)");
$last_id = mysql_insert_id();
$xmlString .= "<gsm messageId=\"$last_id\">".$p."</gsm>";
$cnt++;
if ($cnt % 1000 == 0) { usleep(100) }
}
您可以根据自己的需要使用usleep
或sleep
。我已经用过了。你获得了表现。试试吧。
答案 2 :(得分:1)
如果 在代码中执行此操作,则可以使用php函数array_chunk将数组块化为每个包含100个元素的数组。这是array_chunk上的文档:link。但正如所指出的那样,这不太可能成为瓶颈。