php foreach重复两次

时间:2012-05-22 09:11:11

标签: php foreach zend-lucene

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

我有一些Zend_Search_Lucene的结果,它给出3个结果,ID为:2,3,4

然后我从一个用Doctrine创建的无关查询中得到了一些记录,这些记录让我说两个ID为2和3的记录。

Search Lucene的结果应该在页面上显示为3条记录。其中我需要检查一个ID是否等于Docrine查询的另一个ID,即如果有匹配即:2 = 2,3 = 3显示某些东西,如果不是ie:2 = 3显示另一个东西。< / p>

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

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

    }

...等

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

如果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每个循环最多执行一次。