назначенная переменная не работает в цикле do while при использовании PHP - PullRequest
0 голосов
/ 18 ноября 2018

Я работаю над Do While loop, в моем проекте он работает , отлично с первого раза .

До while statement я присваивал значение массиву Я мог успешно распечатать массив в нижней части кода, НО его становится 0, когда я проверяю сверхупетли .

Код:

$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);

Когда я печатаю в другом, он работает, но я не могу напечатать начало цикла do, его размер массива показа равен 0

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Есть несколько проблем с вашим кодом. Прежде всего, это ничего не делает:

if (sizeof($looparray)==0) {
    $firstsponarray= $poolafirtsid;
} else {
    $firstsponarray= $looparray;
}

, так как следующая строка после этого фрагмента кода:

$firstsponarray= getUserArray($poolafirtsid);

, который отменяет любое предыдущее назначение $firstsponarray.

Во-вторых, значение $looparray вообще не изменяется в цикле do, поэтому он всегда будет пустым массивом. Я нашел эту строку:

$rooparray=membercount($avalue);

Я полагаю, что это опечатка, а правильная строка - $looparray=membercount($avalue);. То же самое с линией $aarraylist[$avalue]=$rooparray;. Однако изменение, которое также ничего не делает, поскольку $firstponarray никогда не будет равно $looparray по причине, описанной выше.

Попробуйте сначала отладить ваш код, и, если проблема не исчезнет, ​​опубликуйте обновленный код.

0 голосов
/ 29 ноября 2018

Я буду игнорировать все проблемы с именами, но решу проблему с while петлей:

$loopend =0;
do {
    ...
    if(membercount($asmallestsponid)<3) {
         $loopend = 1;
    }else{
      ...
    }
while ($loopend == 1);

Есть 2 варианта:

  1. Условие if равно true : если так, $loopend получит 1, поэтому цикл продолжится (что, по-видимому, не подходит для вызова его "конец цикла", но что нибудь ...)

  2. Условие if false : тогда $loopend остается таким же (init как 0), поэтому цикл останавливается

ИМХО - это упростит ваш цикл:

do {
    ...
while (membercount($asmallestsponid)<3);
0 голосов
/ 19 ноября 2018

Мы не знаем, что возвращает membercount($asmallestsponid), но кажется (наиболее вероятно), что при 1-м проходе оно попадает в

} else {
                $looparray = $arraymer;
                //print_r($looparray);
}

, значение $loopend не изменяется, т.е.остается на 0 и при первом проходе сравнивает 0 с 1 и решает выйти из цикла do {} while как 0 != 1

...