使用PHP在块中处理数组

时间:2011-01-10 19:34:48

标签: php arrays chunking

我从PHP脚本连接到的数据库返回大约500行并执行查询。对于返回的每一行,我以表格格式显示它。脚本在Firefox中运行良好,最终可以在IE中运行,但是在一切正常显示之前,用户会得到“停止运行此脚本”提示1到2次(告诉IE继续...)。

为了解决这个问题,我需要将一些数据发送回浏览器 - 我认为最好的方法是以块/批处理数组。 PHP有一个array_chunk函数,但我在这里弄清楚如何使用它。

要获取数据库行,我使用:

$result = mssql_query($query);

...然后将它们显示在表格中:

while($row = mssql_fetch_array($result))
{
  [DISPLAY TABLE ROW IN TABLE]
}

使用array_chunk处理我的数组的最佳方法是什么,例如以50块为单位?

3 个答案:

答案 0 :(得分:1)

array_chunk只有在您从数据库中获取完整的信息数据后才会帮助您。从你的问题来看,这听起来像是脚本挂在数据库的实际查询中,因为它被设置为一个数组然后你想要处理整个数组。

您可以输出表格的每一行,同时仍然使用loop来获取数据库中的每一行结果,而不是先创建主数组。但是,当您的脚本通过查询时,您的用户可能会看到页面以块的形式加载。

现在关闭你的问题主题:如果页面加载的块不是你理想的,你可以考虑在后台异步运行查询(使用JavaScript),同时显示某种“加载”消息,直到脚本运行完毕。然后,将结果输出到页面。

或者,如果您可以选择不同时显示所有500多个结果,则可以使用分页并使用LIMITOFFSET SQL关键字来抓取整个查询的部分内容。然后,创建指向结果的下一页或上一页的链接,这将改变OFFSET

答案 1 :(得分:1)

您正在立即向浏览器发送大量数据。为了使这个表现良好,可以:

  1. 发送更少的数据。正如其他答案所示,使用SQL LIMIT对结果进行分页,并输出链接在页面中来回导航({{1} },/data/page/1/data/page/55等)。这具有次要影响:当您在每个请求上处理服务器上较少的数据时,您的PHP和SQL将更快地执行。

  2. 以较小的块发送数据。循环遍历行时,定期调用/data/page/last(每flush();行)以使浏览器有时间显示一些结果在取得更多之前。

  3. 以递增方式拉取数据。您也可以通过AJAX以较小的位(一次50行)获取结果。您可以将此视为上述分页或类似内容。

  4. 缩小数据。最小化返回浏览器的HTML大小也会产生显着差异。您可以删除额外的$n标记,类,ID或缩写内容本身(链接回完整的详细信息)。您也可以使用更简洁的格式(如JSON)发送数据,并使用JavaScript进行扩展。

答案 2 :(得分:0)

你提出了错误的问题,我认为...... array_chunk不是你最好的选择,因为你需要完整的数组来填充它。 Ergo:你已经在整个结果集中循环了一次。

为什么不直接在你到达的while循环中输出?

如果您觉得必须将数据分块,请使用外部计数器。循环内增量,并使用MODULO操作数检查该值。

$i = 0;
while($row = mssql_fetch_array($result))
{
  if(++$i % 500 == 0) {
    [DISPLAY TABLE ROW IN TABLE]
  }
}