PHP在前代函数完成之前继续执行代码
我有一个使用错误逻辑的全文搜索代码,否则它将无法理解PHP的工作方式。首先,我有一个相当长的叫做* file_find *的函数,它返回一个数组。我有一个名为文件的数组* all_files *中,我通过跑步步*的File_Find *每个,像这样:PHP在前代函数完成之前继续执行代码
$allftsearch_results = array();
for ($i = 0; $i <= count($all_files); $i++) {
$current_file = $all_files[$i];
//Run one file
if (file_exists($current_file)) {
$search_result = file_find($current_file, $phpfilenames[$i], $num_ands, $keywords_core, $keywords_boolean, $phpfilenames, $ascii_limit);
//Add file results to allftsearch_results array
if (!empty($search_result)) {
foreach ($search_result as $keyfilename => $invpagevalue) {
array_push($allftsearch_results, $keyfilename);
}
}
}
}
如果我打印出$ current_file因为它发送到*的File_Find *,它反映的是为了它应该是:A的,然后是B的,然后是C的等等。但是当我在结果返回后打印出$ keyfilename时,它们落后于实际提供给函数的文件。我最终是这样的:
- 当前文件:burnham.html
- 当前文件:burroughs.html
- 当前文件:burton.html
- 当前文件:busch.html
- 当前文件:busoni.html
- 当前文件:butler.html
- 返回的文件:阿尔比
- 当前文件:byrd.html
- 当前文件:byrnes.html
- 当前文件:byron.html
- 返回的文件: albeville 等
这一切都在同一如果file_exists语句,所以在* file_find *完成之前,代码甚至不应该到达if foreach($ search_result ...)。但显然它在后台运行,并在其他几个文件发送并堆叠后返回结果。如果我一次打印所有结果,这不会成为问题,但我有AJAX一次发送100个批次的文件,并且它会将结果全部不按顺序返回,A会在B之后进来并且结果会重复当他们不应该。
如何确保它等待代码继续执行,直到* file_find *完成?
不知道这会起作用(因为我不知道file_find函数在做什么),但也许你可以将file_find函数($ search_result)的结果作为另一个函数的参数填入array_push。这可能会阻止任何导致该功能乱序发生的事件。
for ($i = 0; $i <= count($all_files); $i++) {
$current_file = $all_files[$i];
if (file_exists($current_file)) {
filterReturn(file_find($current_file, $phpfilenames[$i], $num_ands, $keywords_core, $keywords_boolean, $phpfilenames, $ascii_limit));
}
}
function filterReturn($search_result){
if (!empty($search_result)) {
foreach ($search_result as $keyfilename => $invpagevalue) {
array_push($allftsearch_results, $keyfilename);
}
}
}
我觉得有点傻,因为即使我知道没有办法让功能失灵。问题实际上是我有两个文件名数组传递给Javascript,只有一个被修改,而另一个只是重复发送。未修改的那个是我打印结果的那个。
因此,当它会说“当前文件:管家,退回的文件:albee”时,albee是未修改数组中对应于正确修改的“管家”值的数值。
这并不是在后台运行`find_file`的问题。 PHP不会也不能在单独的线程中意外地运行一些函数,即使它不会以某种方式将结果追溯地合并到函数的初始返回值中。你的算法在某种程度上被打破了,认为很难从样本代码中知道如何。 `file_find`到底做了什么?偶然修改'$ all_files`吗? – meagar 2011-01-31 19:49:04