PHP将数组拆分为数百个
我有一个数组,可以容纳数千个项目(通常约5000个项目)。 我需要将此数组拆分为数百个并处理它们,然后继续处理其余的项。 到目前为止,我处理整个阵列的速度很慢。 我的代码是PHP将数组拆分为数百个,php,Php,我有一个数组,可以容纳数千个项目(通常约5000个项目)。 我需要将此数组拆分为数百个并处理它们,然后继续处理其余的项。 到目前为止,我处理整个阵列的速度很慢。 我的代码是 foreach($result as $p){ $sqlQuery = mysql_query("INSERT INTO message_details(contact, message_id)VALUES('$p', $message_last_id)");
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++;
}
foreach($p结果){
$sqlQuery=mysql_query(“插入到消息_详细信息(联系人、消息_id)值($p',$message_last_id)”);
$last_id=mysql_insert_id();
$xmlString.=''.$p.'';
$cnt++;
}
如何处理阵列中数百个项目?100、200、300等等
致以最良好的祝愿,
Nicos如果您在代码中有这样做,那么您可以使用php函数array\u chunk将数组分块为每个100个元素的数组。以下是数组块上的文档:。但正如所指出的,这不太可能成为瓶颈。如果您在代码中有这样做,您可以使用php函数array\u chunk将数组分块为每个数组包含100个元素的数组。以下是数组块上的文档:。但正如所指出的,这不太可能成为瓶颈。
foreach($p的结果){
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) }
}
$sqlQuery=mysql_query(“插入到消息_详细信息(联系人、消息_id)值($p',$message_last_id)”);
$last_id=mysql_insert_id();
$xmlString.=''.$p.'';
$cnt++;
如果($cnt%1000==0){usleep(100)}
}
您可以根据需要使用usleep
或sleep
。我已经用过这个了。你会获得表现。试试看。foreach($p作为结果){
$sqlQuery=mysql_query(“插入到消息_详细信息(联系人、消息_id)值($p',$message_last_id)”);
$last_id=mysql_insert_id();
$xmlString.=''.$p.'';
$cnt++;
如果($cnt%1000==0){usleep(100)}
}
您可以根据需要使用
usleep
或sleep
。我已经用过这个了。你会获得表现。试试看。也许你可以这样试试:
首先选择消息详细信息的最后一个ID
$sqlQuery = mysql_query("SELECT %last_id_col_name% FROM message_details ORDER BY %last_id_col_name% DESC LIMIT 1".$sInserts);
然后:
然后从该表中选择所有条目,其中id大于您首先选择的条目
写信给
$xmlString .= '<gsm messageId="'.$last_id.'">'.$p.'</gsm>';
$xmlString.=''.$p';
如果这样做,您只需要3个DB查询,而不需要数千个。也许您可以这样做: 首先选择消息详细信息的最后一个ID
$sqlQuery = mysql_query("SELECT %last_id_col_name% FROM message_details ORDER BY %last_id_col_name% DESC LIMIT 1".$sInserts);
然后:
然后从该表中选择所有条目,其中id大于您首先选择的条目
写信给
$xmlString .= '<gsm messageId="'.$last_id.'">'.$p.'</gsm>';
$xmlString.=''.$p';
如果这样做,您只需要3个DB查询,而不需要数千个。为什么不使用
sleep()
让SQL server恢复(或其他)?还要在每次迭代时更新XML文件。为什么处理100个项目的块会更好?瓶颈可能实际上是插入本身。首先,我将使用INSERT-INTO。。。值(第1行),(第2行),…
语法。锁定表,您可以手动派生id,它是最后一个加上一个。我不是专业人士,但我觉得如果您像$\u array[x][I]那样拆分数组,效果会更好。这样你就可以把数组分成更多的类别等等,但这并不会加快它的速度,甚至可能会减慢它的速度more@Nicos在.Net中,当我需要进行批量插入时,我总是从需要插入的所有对象创建一个xml文档,然后将其发送到存储过程。这在PHP和MySQL中也是可能的,但我没有示例。这里有一篇关于MySQL批量插入xml的文章:PHP文档告诉您如何创建xml文档。这可能是最快的方法,但我想您需要花费一些时间来实现它。为什么不使用sleep()
让SQL server恢复(或其他什么)?还要在每次迭代时更新XML文件。为什么处理100个项目的块会更好?瓶颈可能实际上是插入本身。首先,我将使用INSERT-INTO。。。值(第1行),(第2行),…
语法。锁定表,您可以手动派生id,它是最后一个加上一个。我不是专业人士,但我觉得如果您像$\u array[x][I]那样拆分数组,效果会更好。这样你就可以把数组分成更多的类别等等,但这并不会加快它的速度,甚至可能会减慢它的速度more@Nicos在.Net中,当我需要进行批量插入时,我总是从需要插入的所有对象创建一个xml文档,然后将其发送到存储过程。这在PHP和MySQL中也是可能的,但我没有示例。这里有一篇关于MySQL批量插入xml的文章:PHP文档告诉您如何创建xml文档。这可能是最快的方法,但我想您需要花一点时间来实现它。自动增量会处理ID,无需在insert查询中输入自己的ID。而且,字符串连接看起来很糟糕。我会将一个数组传递给pdo或更高级别的东西。我只调整了他的插入。我不知道$message\u last\u id
是否表示该表的id。我想说明的是,没有必要对每个循环进行插入。这就是脚本花费这么长时间的原因。Auto-increment会处理ID,无需在insert查询中输入自己的ID。而且,字符串连接看起来很糟糕。我会将一个数组传递给pdo或更高级别的东西。我只调整了他的插入。我不知道$message\u last\u id
是否表示该表的id。我想说明的是,没有必要对每个循环进行插入。这就是脚本花费这么长时间的原因。这只是防止数据库缓冲区溢出和将数据交换到硬盘吗?可能是我看不出有更多的含义。@MikulasDite,如果您有大量数据要插入数据库,或者您缓冲了SGDB,或者您的应用程序溢出了我的应用程序