2016-01-03 43 views
-2

末我有一个长时间的工作foreach循环,其在当所有的项目都处理结束正常输出..获取输出 - 不只是在最后一个项目的环

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

    $i++; 
    } 

事实上,对于每个匹配[0]的600多个匹配,它包括 'reg-process.php'页面,它依次处理每个匹配,并在一个多小时后完成并输出所有结果。 我需要的是不要等到最后一个项目才能看到结果,因此在处理每个项目之后循环正在工作时,它可能会被回显。 因此,我再次需要循环包含'reg-process.php'页面打印出 结果,不要等到最后一个项目,然后所有打印出来一样..像继续?

+0

这将* help *,但不会完全解决您的问题(这实际上不能解决)。 **在你的循环**中,在你的包含之后,加入这一行:'ob_flush();' - 它会导致PHP将输出推送到浏览器。这不会是完美的,但它会有所帮助。 **注意:**这不是一个好的方法 - 你不应该在循环中包含'',而应该将该代码(在'reg-process.php'中)转换成*函数*并且调用该函数在循环内部。 –

+0

如此辉煌的人,我不知道你的代码是什么,但它的工作原理..也许不完全是在每个项目的循环后,但像每10个项目循环后它回声结果并追加到屏幕的结尾,非常简单和完美对我来说。所以对于一个需要一个多小时才能完成的600个项目循环,我可以在循环为下一个项目工作的同时学习一些结果。 –

回答

-1

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

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

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

+0

好吧,在你的例子完成后,它会输出或重新运行所有$ arr项目正确..我需要的是不要等待$ arr中的600个项目,因此在每个循环尝试输出后都是如此。 –

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()将不起作用,因为浏览器不解析待处理页面请求的内容;相反,您将不得不使用网络嗅探器来读取部分刷新的内容。

+0

不错我确定你的两条建议都能正常工作,只是我记得我的懒惰想法就像你的答案,但我在开发过程中忘记了它们,希望有'继续'之类的东西来做到这一点非常简单..好主意和信息丰富人..顺便说一句,为什么人们给这个问题负面的分数?请如果有人不能得到的问题,请不要给它负面的标记! –

+0

@ShahramMohseni:恕我直言,你的问题正在被低估,因为它代表了糟糕的编码/不好的做法的例子,人们不希望其他用户为他们的代码挑选它。只是我的两分钱... – SaschaM78

相关问题