php foreach se répétant deux fois
-
12-12-2019 - |
Question
J'ai essayé différentes solutions à ce problème sans succès.Le problème est le suivant :
J'ai quelques résultats de Zend_Search_Lucene qui donnent, disons, 3 résultats avec l'ID de :2, 3, 4
Ensuite, j'ai quelques enregistrements d'une requête sans rapport réalisée avec Doctrine qui me donne, disons, deux enregistrements avec l'ID ID :2 et 3.
Les résultats de Search Lucene devraient apparaître sur la page avec un total de 3 enregistrements.Parmi ceux-ci, je dois vérifier si un ID est égal à un autre ID de la requête Docrine, c'est-à-dire s'il y a une correspondance, c'est-à-dire :2=2 , 3=3 montre quelque chose, sinon c'est à dire :2=3 montre autre chose.
J'essaie de faire cela avec FOREACH deux fois et une déclaration IF ELSE mais j'obtiens des résultats doubles sur la page :
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.
Je comprends pourquoi les enregistrements sont répétés deux fois mais je ne sais pas quelle est la bonne façon d'obtenir le bon résultat.Puis-je avoir une aide s'il vous plait?Mes excuses si je fais quelque chose de stupide.:)
La solution
foreach(... $r) {
$found = false;
foreach(... $r2) {
if (... == ...) {
$found = true; break;
}
}
if ($found) {
// something
} else {
// something else
}
}
Autres conseils
Vous pourriez éliminer l'intérieur foreach
si le tableau dans $this->records2
est une carte comme celle-ci :
array(2 => array('id' => 2));
Puis à l'intérieur du premier foreach :
if (isset($this->records2[$r->id])) {
// do something
} else {
// do something else
}
De cette façon, // do something else
et // do something
sont exécutés au plus une fois par boucle.