PHP在前一个函数完成之前继续执行代码

时间:2011-01-31 19:17:01

标签: php

我有一个使用错误逻辑的全文搜索代码,否则它会违反我理解PHP工作的方式。首先,我有一个相当冗长的函数叫做* file_find *,它返回一个数组。我有一个名为* all_files *的文件数组,我逐步在每个文件上运行* file_find *,如下所示:

$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
  • 已退回的文件: albee
  • 当前档案:byrd.html
  • 当前档案:byrnes.html
  • 当前档案:byron.html
  • 返回文件: albeville 等

如果在file_exists语句中,它们都在相同的内容中,因此在* file_find *完成之前,代码甚至不应该访问if foreach($ search_result ...)。但显然它正在后台运行,并在其他几个文件被发送到堆栈之后返回结果。如果我一次打印所有结果,这不会是一个问题,但我让AJAX一次发送100个文件的批次,并且它返回结果全部乱序,A在B之后进入,结果重复什么时候不应该。

如何在* file_find *完成之前确保等待继续执行代码?

2 个答案:

答案 0 :(得分:0)

不确定这会起作用(因为我不知道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);
        }
    }
}

答案 1 :(得分:0)

我觉得有点傻,因为即使我知道功能无法正常运行。问题实际上是我有两个文件名数组被传递Javascript,只有一个被修改而另一个被重复发送。未经修改的是我打印的结果。

所以当它说“当前文件:管家,返回文件:albee”时,albee是未修改数组中与正确修改的“管家”值对应的值。

相关问题