我有一个数组,最多可以容纳数千个项目。通常在 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等
此致敬意尼科斯
也许你可以这样尝试:
首先选择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 个数据库查询,而不是数千个。
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
,具体取决于您想要的内容。我已经用过这个了。您可以获得性能。试试吧。
如果你必须在代码中这样做,你可以使用 php 函数array_chunk将你的数组分成 100 个元素的数组。 以下是array_chunk上的文档:链接。 但正如所指出的,这不太可能是瓶颈。