Comment corriger l'erreur:Notice: Undefined offset: 4 line 512
4 réponses
Calimero
Bonjour à tous,
j'ai un petit souci d'erreur d'undefined offset.
Voici mon code:
$travaux = (array)$this->programme->getTravaux();
$tvx = array();
$tvx = $travaux;
if($this->programme->isMaison()):
$ttravaux = array();
foreach((array)$travaux as $tv):
if(!isset($tvx[$tv->getLotsId()]))
$ttravaux[$tv->getLotsId()] ; ==== ligne qui me génère
l'erreur undefined offset
$ttravaux[$tv->getLotsId()][] = $tv;
endforeach;
Sauriez-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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Pascal PONCET
Calimero a écrit :
Bonjour à tous,
Bonjour,
j'ai un petit souci d'erreur d'undefined offset.
Donc un élément de tableau non trouvé avec l'indice passé.
$ttravaux[$tv->getLotsId()] ; ==== ligne qui me génère l'erreur undefined offset
On n'a pas grand chose à se mettre sous la dent pour déterminer l'erreur . On ne sait pas ce que ramènent les méthodes "getTravaux()" et "getLotsId()".
Sauriez-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.
Et bien, la question globale c'est de savoir si les indices ramenés par "$tv->getLotsId()" correspondent ou non à des positions d'éléments qui existent dans le tableau "$ttravaux".
Cordialement, Pascal
Calimero a écrit :
Bonjour à tous,
Bonjour,
j'ai un petit souci d'erreur d'undefined offset.
Donc un élément de tableau non trouvé avec l'indice passé.
$ttravaux[$tv->getLotsId()] ; ==== ligne qui me génère
l'erreur undefined offset
On n'a pas grand chose à se mettre sous la dent pour déterminer l'erreur
. On ne sait pas ce que ramènent les méthodes "getTravaux()" et
"getLotsId()".
Sauriez-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.
Et bien, la question globale c'est de savoir si les indices ramenés par
"$tv->getLotsId()" correspondent ou non à des positions d'éléments qui
existent dans le tableau "$ttravaux".
Donc un élément de tableau non trouvé avec l'indice passé.
$ttravaux[$tv->getLotsId()] ; ==== ligne qui me génère l'erreur undefined offset
On n'a pas grand chose à se mettre sous la dent pour déterminer l'erreur . On ne sait pas ce que ramènent les méthodes "getTravaux()" et "getLotsId()".
Sauriez-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.
Et bien, la question globale c'est de savoir si les indices ramenés par "$tv->getLotsId()" correspondent ou non à des positions d'éléments qui existent dans le tableau "$ttravaux".
Cordialement, Pascal
Antoine Polatouche
Calimero a écrit :
Bonjour à tous,
Bonsoir,
j'ai un petit souci d'erreur d'undefined offset.
Ce n'est pas une erreur, mais une 'notice', comme spécifié dans le titre de ton message. (voir réglages dans php.ini pour ça)
Voici mon code:
$travaux = (array)$this->programme->getTravaux(); $tvx = array(); $tvx = $travaux; if($this->programme->isMaison()): $ttravaux = array(); foreach((array)$travaux as $tv): if(!isset($tvx[$tv->getLotsId()])) $ttravaux[$tv->getLotsId()] ; ==== ligne qui me génère l'erreur undefined offset
$ttravaux[$tv->getLotsId()][] = $tv; endforeach;
Sauriez-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.
Tu voulais qu'elle fasse quoi cette ligne ??? Si tu voulais initialiser une cellule avec un tableau, tu aurais pu faire $ttravaux[$tv->getLotsId()]=array(); mais $ttravaux[$tv->getLotsId()][] = $tv; fait le boulot tout seul.
Calimero a écrit :
Bonjour à tous,
Bonsoir,
j'ai un petit souci d'erreur d'undefined offset.
Ce n'est pas une erreur, mais une 'notice', comme spécifié dans le titre
de ton message. (voir réglages dans php.ini pour ça)
Voici mon code:
$travaux = (array)$this->programme->getTravaux();
$tvx = array();
$tvx = $travaux;
if($this->programme->isMaison()):
$ttravaux = array();
foreach((array)$travaux as $tv):
if(!isset($tvx[$tv->getLotsId()]))
$ttravaux[$tv->getLotsId()] ; ==== ligne qui me génère
l'erreur undefined offset
$ttravaux[$tv->getLotsId()][] = $tv;
endforeach;
Sauriez-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.
Tu voulais qu'elle fasse quoi cette ligne ???
Si tu voulais initialiser une cellule avec un tableau, tu aurais pu
faire $ttravaux[$tv->getLotsId()]=array();
mais $ttravaux[$tv->getLotsId()][] = $tv; fait le boulot tout seul.
Ce n'est pas une erreur, mais une 'notice', comme spécifié dans le titre de ton message. (voir réglages dans php.ini pour ça)
Voici mon code:
$travaux = (array)$this->programme->getTravaux(); $tvx = array(); $tvx = $travaux; if($this->programme->isMaison()): $ttravaux = array(); foreach((array)$travaux as $tv): if(!isset($tvx[$tv->getLotsId()])) $ttravaux[$tv->getLotsId()] ; ==== ligne qui me génère l'erreur undefined offset
$ttravaux[$tv->getLotsId()][] = $tv; endforeach;
Sauriez-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.
Tu voulais qu'elle fasse quoi cette ligne ??? Si tu voulais initialiser une cellule avec un tableau, tu aurais pu faire $ttravaux[$tv->getLotsId()]=array(); mais $ttravaux[$tv->getLotsId()][] = $tv; fait le boulot tout seul.
Bruno Desthuilliers
Calimero a écrit :
Bonjour à tous,
j'ai un petit souci d'erreur d'undefined offset.
Voici mon code:
$travaux = (array)$this->programme->getTravaux();
Si $this->programme->getTravaux() retourne un array, est-il nécessaire de le caster ?
$tvx = array();
crée un tableau et l'associe à l'identifiant $tvx
$tvx = $travaux;
associe le tableau existant $travaux à l'identifiant $tvx - ce qui remplace l'assignation précédente, par conséquent inutile.
if($this->programme->isMaison()):
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...
$ttravaux = array();
pas très clair comme nommage... entre $travaux et $ttravaux, on a vite fait de s'embrouiller.
foreach((array)$travaux as $tv):
$travaux est *déjà* un tableau. Pourquoi re-caster ?
if(!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 ?
$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.
$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...
endforeach;
il manquerait pas un endif ?
Sauriez-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...
Calimero a écrit :
Bonjour à tous,
j'ai un petit souci d'erreur d'undefined offset.
Voici mon code:
$travaux = (array)$this->programme->getTravaux();
Si $this->programme->getTravaux() retourne un array, est-il nécessaire
de le caster ?
$tvx = array();
crée un tableau et l'associe à l'identifiant $tvx
$tvx = $travaux;
associe le tableau existant $travaux à l'identifiant $tvx - ce qui
remplace l'assignation précédente, par conséquent inutile.
if($this->programme->isMaison()):
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...
$ttravaux = array();
pas très clair comme nommage... entre $travaux et $ttravaux, on a vite
fait de s'embrouiller.
foreach((array)$travaux as $tv):
$travaux est *déjà* un tableau. Pourquoi re-caster ?
if(!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 ?
$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.
$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...
endforeach;
il manquerait pas un endif ?
Sauriez-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();
}
Si $this->programme->getTravaux() retourne un array, est-il nécessaire de le caster ?
$tvx = array();
crée un tableau et l'associe à l'identifiant $tvx
$tvx = $travaux;
associe le tableau existant $travaux à l'identifiant $tvx - ce qui remplace l'assignation précédente, par conséquent inutile.
if($this->programme->isMaison()):
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...
$ttravaux = array();
pas très clair comme nommage... entre $travaux et $ttravaux, on a vite fait de s'embrouiller.
foreach((array)$travaux as $tv):
$travaux est *déjà* un tableau. Pourquoi re-caster ?
if(!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 ?
$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.
$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...
endforeach;
il manquerait pas un endif ?
Sauriez-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(); }