Post by CalimeroBonjour à tous,
j'ai un petit souci d'erreur d'undefined offset.
$travaux = (array)$this->programme->getTravaux();
Si $this->programme->getTravaux() retourne un array, est-il nécessaire
de le caster ?
crée un tableau et l'associe à l'identifiant $tvx
Post by Calimero$tvx = $travaux;
associe le tableau existant $travaux à l'identifiant $tvx - ce qui
remplace l'assignation précédente, par conséquent inutile.
L'intérêt premier de la POO est d'éviter autant que possible les
branchements "manuels" de ce type. $this->programme devrait savoir quoi
faire par lui-même...
Post by Calimero$ttravaux = array();
pas très clair comme nommage... entre $travaux et $ttravaux, on a vite
fait de s'embrouiller.
$travaux est *déjà* un tableau. Pourquoi re-caster ?
Post by Calimeroif(!isset($tvx[$tv->getLotsId()]))
Je rappelle qu'arrivé ici, $tvx et $travaux sont le même tableau. Tu es
sûr de ce que tu es en train de faire ?
Post by Calimero$ttravaux[$tv->getLotsId()] ; ==== ligne qui me génère
l'erreur undefined offset
Et qui de plus ne sert à rien.
Cette instruction essaie d'accéder à l'indice $tv->getLotsId() du
tableau $ttravaux. A la première itération (au moins...), cet indice
n'est pas défini dans ce tableau[1], ce que te signale d'ailleur le
message d'erreur. En tout état de cause, même si cet indice est défini,
tu ne fais rien de son contenu.
[1] en simplifiant, ça revient à:
$tableau = array();
$tableau[42];
si tu ne vois pas où est l'erreur, il serait probablement temps
d'apprendre php.
Post by Calimero$ttravaux[$tv->getLotsId()][] = $tv;
créé un tableau (s'il n'existe pas déjà) à l'indice $tv->getLotsId() et
y ajoute une référence sur $tv.
Accessoirement, ça fait trois fois que tu appelles la même méthode sur
le même objet. Une variable locale pourrait aider question perfs...
il manquerait pas un endif ?
Post by CalimeroSauriez-vous pourquoi j'ai cette erreur? J'ai 2 éléments($tv->getLotsId
()) dans mon tableau et c'est ce deuxième qui pose problème. Merci
d'avance si vous avez une petite idée.
Comme on ne sait pas ce que tu cherches à faire, c'est difficile de
corriger. Donc on va commencer par réécrire ça un poil plus lisiblement:
$travaux = $this->programme->getTravaux();
if ($this->programme->isMaison()) {
// identifiant débile, mais au moins on ne confond plus
$machin = array();
foreach ($travaux as $tv) {
$lotsId = $tv->getLotsId();
// je persiste à ne pas comprendre à quoi ce test
// est supposé servir...
// tu ne te serais pas mélangé entre $travaux et $ttravaux,
// par hasard ? Et il ne manquerait pas un truc du genre
// '= array()' avant le point-virgule ?
if (! isset($travaux[$lotsId])) {
$machin[$lotsId] ; // WTF ?
}
$machin[$lotsId][] = $tv;
}
}
Bon, je suppose que l'idée est de regrouper les travaux par id de lot ?
Si oui, ça ressemblerait plutôt à ça:
$travaux = $this->programme->getTravaux();
if ($this->programme->isMaison()) {
$travauxParIdLot = array();
foreach ($travaux as $tv) {
$lotsId = $tv->getLotsId();
// pas indispensable mais éventuellement plus propre
if (! isset($travauxParId[$lotsId])) {
$travauxParIdLot[$lotsId] = array();
}
$travauxParIdLot[$lotsId][] = $tv;
}
}
Sinon, je poste de ce pas ce code au dailyWTF...