PHP拆分数组数百个

时间:2011-12-14 13:12:40

标签: php

我有一个数组,可以容纳数千个项目。(通常约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等

最诚挚的问候, 尼科斯

3 个答案:

答案 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) }
}

您可以根据自己的需要使用usleepsleep。我已经用过了。你获得了表现。试试吧。

答案 2 :(得分:1)

如果 在代码中执行此操作,则可以使用php函数array_chunk将数组块化为每个包含100个元素的数组。这是array_chunk上的文档:link。但正如所指出的那样,这不太可能成为瓶颈。