php foreach повторяется дважды

Я пробовал разные решения этой проблемы без успеха. Проблема заключается в следующем:

У меня есть некоторые результаты из Zend_Search_Lucene, которые дают, скажем, 3 результата с ID: 2, 3, 4

Затем у меня есть несколько записей из несвязанного запроса, сделанного с помощью Doctrine, который дает мне, скажем, две записи с идентификатором ID: 2 и 3.

Результаты поиска Lucene должны отображаться на странице как 3 записи. Из них мне нужно проверить, равен ли идентификатор другому идентификатору запроса Docrine, то есть если есть совпадение, то есть: 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

    }

...так далее.

Я понимаю, почему записи повторяются дважды, но я не знаю, как правильно получить правильный результат. Может кто-нибудь, пожалуйста, помогите? Приношу свои извинения, если я делаю глупости.:)

2 ответа

Решение
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 выполняются не более одного раза за цикл.

Другие вопросы по тегам