Pregunta

He estado probando diferentes soluciones para este problema sin éxito.El problema es este:

Tengo algunos resultados de Zend_Search_Lucene que dan, digamos, 3 resultados con el ID de:2, 3, 4

Luego tengo algunos registros de una consulta no relacionada realizada con Doctrine que me da, por ejemplo, dos registros con el ID de identificación:2 y 3.

Los resultados de Search Lucene deberían mostrarse en la página como un total de 3 registros.De estos necesito verificar si un ID es igual a otro ID de la consulta de Docrine, es decir, si hay una coincidencia, es decir:2=2, 3=3 muestra algo, si no, es decir:2=3 muestra otra cosa.

Intento hacer esto con FOREACH dos veces y una declaración IF ELSE pero obtengo resultados dobles en la 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.

Entiendo por qué los registros se repiten dos veces pero no sé cuál es la forma correcta de obtener el resultado correcto.¿Puede ayudarme alguien, por favor?Mis disculpas si hay alguna tontería que estoy haciendo.:)

¿Fue útil?

Solución

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

Otros consejos

Podrías eliminar el interior. foreach si la matriz en $this->records2 es un mapa como este:

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

Luego dentro del primer foreach:

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

De este modo, // do something else y // do something se ejecutan como máximo una vez por bucle.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top