Bonjour,

j'ai un code avec une boucle while qui liste mes commandes

A l'intérieur de cette boucle je fais une requete pour récupérer les produits de ma commande.

Si j'ai 5000 commandes alors je fais 5000 sous-requetes ce qui n'est pas vraiment optimal ...
J'ai donc fais une fonction qui stock dans un array() la totalité des produits
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
function setTabKdoCommande()
{
	$req 	= 	$this->ewp->sqlQuery	("SELECT com_cli, kdo FROM ".EXP_PROD." WHERE prep=1 AND type=1 AND com_cli>='".$this->getMinCommande()."' ORDER BY com_cli ASC, kdo ASC");
	while($o = $this->ewp->sqlGetObj($req))
	{
		//ajout dans mon array
		//com_cli ==> id de la commande
		//kdo ==> id du produit
		$this->tabKdoCommande[$o->com_cli][]	=	$o->kdo;
	}
}
cette fonction marche bien, pas de soucis de côté là (enfin normalement !)

Dans ma boucle d'origine je remplace la requête que je faisais par un foreach sur le tableau créé précédemment
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
while(....)
{
	$nbOK	=	0;
	foreach($this->tabKdoCommande[$com_cli] as $indexTab => $numKdo)
	{
		if($this->tabKdo[$numkdo] > 0)
		{
			$this->tabKdo[$numKdo]--;
			$nbOK++;
		}
	}
}
le problème c'est que je n'arrive pas à accéder à l'élément $this->tabKdo[$numkdo] alors $numKdo est bien existant et que $this->tabKdo[$numkdo] n'est pas vide (vu avec un print_r)

ce que je ne comprends pas c'est que j'arrive à accéder à l'élément en laissant mon ancienne sous-requete
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
while(....)
{
	$nbOK	=	0;
	$req 	= 	$this->ewp->sqlQuery	("SELECT kdo FROM ".EXP_PROD." WHERE com_cli='".$com_cli."' AND prep=1 AND type=1");
	while($o = $this->ewp->sqlGetObj($req))
	{
		if($this->tabKdo[$o->kdo] > 0)
		{
			$this->tabKdo[$o->kdo]--;
			$nbOK++;
		}
	}
}
là il accède bien à $this->tabKdo[$o->kdo] ...

dans le 1er cas si $numKdo=3000 (par exemple) il n'accède pas à $this->tabKdo[$numkdo]
dans le 2e cas si $o->kdo=3000 alors il accède bien à la valeur de $this->tabKdo[$o->kdo]

je me tords les neurones dans tous les sens depuis une heure car je ne comprends pas ce qui cloche ...
j'ai vérifié les types qui sont des string pour $numKdo et $o->kdo
j'ai essayé de faire des cast (au cas où ...)

mais là je bloque désespérément !

Si vous avez une idée du pourquoi du comment je suis 100% preneur

Merci de m'avoir lu