PHP 将数组拆分为数百个


PHP split array in hundreds

我有一个数组,最多可以容纳数千个项目。通常在 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) }
}

您可以使用usleepsleep,具体取决于您想要的内容。我已经用过这个了。您可以获得性能。试试吧。

如果你必须在代码中这样做,你可以使用 php 函数array_chunk将你的数组分成 100 个元素的数组。 以下是array_chunk上的文档:链接。 但正如所指出的,这不太可能是瓶颈。