web-dev-qa-db-fra.com

la variable assignée ne fonctionne pas en boucle en utilisant PHP

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

6
Asesha George

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:

  1. 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 ...

  2. 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);
5
dWinder

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.

0
José A. Zapata

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

0
Alexey