我有一个使用错误逻辑的全文搜索代码,否则它会违反我理解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时,它们滞后于实际输入函数的文件。我最终得到这样的东西:
如果在file_exists语句中,它们都在相同的内容中,因此在* file_find *完成之前,代码甚至不应该访问if foreach($ search_result ...)。但显然它正在后台运行,并在其他几个文件被发送到堆栈之后返回结果。如果我一次打印所有结果,这不会是一个问题,但我让AJAX一次发送100个文件的批次,并且它返回结果全部乱序,A在B之后进入,结果重复什么时候不应该。
如何在* file_find *完成之前确保等待继续执行代码?
答案 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是未修改数组中与正确修改的“管家”值对应的值。