php foreach repetindo duas vezes
-
12-12-2019 - |
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.:)
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.