在'期间获得输出一个很长的foreach循环 - 不仅仅是循环中最后一项的结尾

时间:2016-01-03 14:37:28

标签: php foreach continue

我有一个很长时间工作的foreach循环,当所有项目都被处理时,它会在最后正确输出..

    foreach ($matches[0] as $map_link) {
    if ($map_link!='' && $i < $max_tags ) {
        include('reg-process.php');
    }

    $i++;
    }

infact为每个$ matches [0]超过600匹配它包括 &#39; REG-process.php&#39;依次处理每个匹配的页面,超过一个小时后,它完成并输出所有结果.. 我需要的是不要等到最后一项看到结果,所以当循环在每个项目处理后工作时它可以回显.. 所以我每次循环都包含&reghu了.php&#39;页面打印出来 结果,不要吵到最后一项,然后立刻打印出来......就像继续?

2 个答案:

答案 0 :(得分:0)

include不应该以您使用它的方式使用,它应该用于包含功能或降低单个文件的复杂性,而不是将其误用为函数。首先,摆脱包含,因为这会在某个时间点导致问题(即,如果它包含函数,你不能多次包含一个文件)。

有不同的方式来获得你想要的东西,这里有两种可能性:

1。)基于文件的日志记录:

<?php
// file: register_process.php
function registerProgress($map_link) 
{
  // YOUR CODE 
  // ...
  // assuming that the result of your code is a string variable that can be logged
  file_put_contents('registration.log', $logResult, FILE_APPEND);
}

include('register_progress.php');    

foreach ($matches[0] as $map_link) {
  if ($map_link!='' && $i < $max_tags ) {
      registerProgress($map_link);
  }
  $i++;
}

2。)切换到ajax:

如果您将脚本作为Web应用程序(而不是控制台应用程序)的一部分运行,则可以重写代码以在每个映射链接上执行一个页面请求。

优点:每次执行调用都会获得可见的结果,减少脚本内存使用,减少超时风险(由于PHP,Web服务器或浏览器超时)。

缺点:需要增加页面请求和代码重构。

ob_flush()无效,因为浏览器无法解析待处理页面请求的内容;相反,你必须使用网络嗅探器来读取部分刷新的内容。

答案 1 :(得分:-1)

您没有使用正确的语法跟踪foreach格式。理想的代码如下 -

form

确保 $ matches [0] 是一个数组。没有数组,它将无法正常工作。只需重写您的代码,希望能正常工作。