Pergunta

Tenho tentado diferentes soluções para este problema sem sucesso.O problema é este:

Eu tenho alguns resultados do formulário Zend_Search_Lucene que fornecem, digamos, 3 resultados com o ID de:2, 3, 4

Então eu tenho alguns registros de uma consulta não relacionada feita com o Doctrine que me dá dois registros com o ID ID:2 e 3.

Os resultados do Search Lucene devem aparecer na página como um total de 3 registros.Destes preciso verificar se um ID é igual a outro ID da consulta Docrine, ou seja, se há correspondência ou seja:2=2 , 3=3 mostra algo, se não, ou seja:2=3 mostra outra coisa.

Tentando fazer isso com FOREACH duas vezes e uma instrução IF ELSE, mas obtenho resultados duplos na página:

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.

Entendo por que os registros são repetidos duas vezes, mas não sei qual é a maneira certa de obter o resultado certo.Alguém pode ajudar por favor?Peço desculpas se houver alguma coisa boba que estou fazendo.:)

Foi útil?

Solução

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

Outras dicas

Você poderia eliminar o interior foreach se a matriz em $this->records2 é um mapa como este:

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

Então dentro do primeiro foreach:

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

Desta maneira, // do something else e // do something são executados no máximo uma vez por loop.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top