Je travaille sur Do While loop
dans mon projet son travail bien première fois .
Avant while statement
, je assignais une valeur à un tableau je pouvais imprimer le tableau au bas du code, MAIS son devenait 0 quand je vérifiais en haut de la boucle .
Code:
$looparray = array();
$loopend = 0;
$arraymer = array();
$poolafirtsid = $previous_array_values; //previous array values
do {
if (sizeof($looparray) == 0) {
$firstsponarray = $poolafirtsid;
} else {
$firstsponarray = $looparray;
}
$firstsponarray = getUserArray($poolafirtsid);
//get user arraylist of first
foreach ($firstsponarray as $avalue) {
$rooparray = membercount($avalue);
$bsponarray = getUserArray($avalue);
//get second users arraylist 9
if (sizeof($bsponarray > 0)) {
$barraymer = array_merge($barraymer, $bsponarray);
}
$aarraylist[$avalue] = $rooparray;
}
$asmallestsponid = getSmallestID($aarraylist);
//get smallest id in the array
if (membercount($asmallestsponid) < 3) {
$loopend = 1;
} else {
global $pooldata;
if (count($barraymer) > 0) {
$pooldata = $barraymer;
}
print_r($pooldata);
}
} while ($loopend == 1);
Quand j'imprime autrement, cela fonctionne mais je suis incapable d'imprimer à partir du début de la boucle do
J'ignorerai tous les problèmes de nom mais traiterai votre problème de boucle while
:
$loopend =0;
do {
...
if(membercount($asmallestsponid)<3) {
$loopend = 1;
}else{
...
}
while ($loopend == 1);
Il y a 2 options:
La condition if est vrai : si oui, $loopend
aura 1 donc la boucle continue (qui ne semble pas convenir à l'appel "fin de boucle" mais quoi que ...
La condition if est false : alors le $loopend
reste identique (init comme 0) de sorte que la boucle s'arrête
IMHO - cela simplifiera votre boucle:
do {
...
while (membercount($asmallestsponid)<3);
Il y a plusieurs problèmes avec votre code. Tout d'abord, cela ne fait rien:
if (sizeof($looparray)==0) {
$firstsponarray= $poolafirtsid;
} else {
$firstsponarray= $looparray;
}
puisque la ligne suivante après ce morceau de code est:
$firstsponarray= getUserArray($poolafirtsid);
qui annule toute affectation antérieure de $firstsponarray
.
Deuxièmement, la valeur de $looparray
ne change pas du tout dans la boucle do
. Ce sera donc toujours un tableau vide. J'ai trouvé cette ligne:
$rooparray=membercount($avalue);
ce qui, je suppose, est une faute de frappe et la ligne correcte est $looparray=membercount($avalue);
. Idem avec la ligne $aarraylist[$avalue]=$rooparray;
. Cependant, changer cela ne fait rien non plus puisque $firstponarray
ne sera jamais égal à $looparray
pour la raison que j'ai décrite en haut.
Essayez d’abord de déboguer votre code et si le problème persiste, postez le code mis à jour.
Nous ne savons pas ce que membercount($asmallestsponid)
renvoie, mais il semble (très probablement) que lors du premier passage, il entre dans
} else {
$looparray = $arraymer;
//print_r($looparray);
}
la valeur de $loopend
ne change pas, c’est-à-dire qu’elle reste à 0
et lors du premier passage, elle compare 0
à 1
et décide de quitter la boucle do {} while
en tant que 0 != 1