获取输出';在';一个长的foreach循环,而不仅仅是在循环中最后一项的末尾


get output 'during' a long foreach loop - not just at the end of last item in loop

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

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

实际上,对于超过600个匹配项的每个$matches[0],它包括"reg process.php"页面,依次处理每个匹配,一个多小时后完成并输出所有结果。。我需要的是不要等到最后一个项目才看到结果,所以当循环在每个项目处理后都在工作时,它可以被响应。。因此,我再次需要每次循环包括"regprocess.php"页面打印输出结果,不哭到最后一项,然后一下子全部打印出来。。继续吗?

include不应该以您使用它的方式使用,它应该用于包含功能或降低单个文件的复杂性,而不是将其作为函数滥用。因此,首先,去掉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服务器或浏览器超时)。

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

CCD_ 1将不起作用,因为浏览器不解析挂起的页面请求的内容;相反,您必须使用网络嗅探器来读取部分刷新的内容。

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

foreach ($arr as $value) {
    $value = $value * 2;
}

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