我一直在尝试不同的解决方案来解决这个问题,但没有成功。问题是这样的:

我从 Zend_Search_Lucene 得到了一些结果,其中 3 个结果的 ID 为:2, 3, 4

然后我有一些来自 Doctrine 的不相关查询的记录,这给了我两个带有 id ID 的记录:2和3。

搜索 Lucene 的结果应在页面上显示总共 3 条记录。其中我需要检查一个 ID 是否等于 Docrine 查询的另一个 ID,即是否存在匹配,即:2=2 , 3=3 显示一些内容,如果没有,即:2=3表明另一件事。

尝试使用 FOREACH 两次和 IF ELSE 语句执行此操作,但我在页面上得到双重结果:

foreach($this->results as $r):    //  records form search Lucene ie 2, 3, 4

    foreach($this->records2 as $r2){     // records from another table (query) 2 and 3

          if(($r2['id']) == ($r->id)) { 
                                      // do something

                            } else {
                              // dosothing else

    }

...ETC。

我理解为什么记录重复两次,但我不知道获得正确结果的正确方法是什么。有人可以帮忙吗?如果我做了一些愚蠢的事情,我很抱歉。:)

有帮助吗?

解决方案

foreach(... $r) {
  $found = false;
  foreach(... $r2) {
    if (... == ...) {
      $found = true; break;
    }
  }
  if ($found) {
    // something
  } else {
    // something else
  }
}
.

其他提示

你可以消除内在 foreach 如果数组在 $this->records2 是这样的地图:

array(2 => array('id' => 2));

然后在第一个 foreach 中:

if (isset($this->records2[$r->id])) {
    // do something
} else {
    // do something else
}

这样, // do something else// do something 每个循环最多执行一次。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top