pff j'arrive 3 plombes après ryle l'es trop rapide

~
==>
hé mais tu as xdebug tu peu déboguer ton sprint avec un IDE

y a quoi dans le "<pre>" (en dehors des vaches ?

)
c'est pas clair ton histoire de checkbox.
la on a un bout de code php qui génère du xml.
Le foreach sur $OTPALL peut effectivement induire une collision de variable si tu utilises les mêmes noms de variables pour les clef tu écrases la clef parente avec celle du premier foreach imbriqué du coup tu ne trouves pas de données pour le second et y a rien qui s'affiche
Attention au nommage des variables c'est pas simple de différencier le tableau de la données courante dans tes foreach (le S se met à la fin de la variable et pas au milieu quand on fait la différence entre la collection et un élément de la collection
Je ferais un truc dans le genre :
<?php
foreach ($OTPAll as $otpKey => $OTP) {
echo '<OTP>';
echo '<id>'.$OTP->getId().'</id>';
echo '<otp>'.$OTP->getOTP().'</otp>';
echo '<actif>';
if ($statutOTP[$OTP->getId()] == true) {
echo 'true';
} else {
echo 'false';
}
echo '</actif>';
echo '<sitesassocies>';
// c'est pas plutôt $OTP->getId() que tu as besoin ?
$idSitesOtp = getSitesParOtp($otpKey);
foreach ($idSitesOtp as $idSite) {
echo '<idSite>'.$idSite[0].'</idSite>';
}
echo '</sitesassocies>';
echo '<tachesassociees>';
// c'est pas plutôt $OTP->getId() que tu as besoin ?
$idTachesOtp = getTachesParOtp($otpKey);
foreach ($idTachesOtp as $idtache) {
echo '<idtache>'.$idtache[0].'</idtache>';
}
echo '</tachesassociees>';
echo '</OTP>';
}
après il faut tester avec tes données, de beau tableau php en entrant du script suffisent pour cela
@+