PHP do-while цикл не работает - PullRequest
       29

PHP do-while цикл не работает

1 голос
/ 02 апреля 2012

Так что я застрял в этом цикле выполнения, не работающем около двух часов. Я действительно не понимаю, почему это не работает. Я получаю эту ошибку:

Notice: Undefined offset: 9 in /public_html/me/yes.php on line 60

Единственная проблема, о которой я думаю, это то, что она не принимает циклы while в do-while.

Вот мой рабочий код только для внутреннего цикла while:

$maxcols = $numofcols-1; //=9
$maxrow = count($myarray)-1; //=44
$currentcol=0;
    $currentrow=1;
    //do {
    $collection->insert(array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
    $currentcol++;
    while ($currentcol<=$maxcols){
    $newdata = array('$set' => array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
    $currentcol--;
    $collection->update(array($title[$currentcol] => $myarray[$currentrow][$currentcol]), $newdata);
    $currentcol++;
    $currentcol++;

    }
    $currentrow++;

    //} while ($currentrow<=$maxrow);

Если я раскомментирую две строки "// do {" и "//} while ($ currentrow <= $ maxrow);" моя программа умирает с ошибкой, о которой я упоминал выше. Есть ли что-то очень простое в том, почему это нарушает мой код? Заранее спасибо </p>

UPDATE:

Строка 60:

$collection->insert(array($title[$currentcol] => $myarray[$currentrow][$currentcol]));

Ответы [ 4 ]

1 голос
/ 02 апреля 2012

Внутренний цикл while заканчивается на $currentcol, установленном на $maxcols. В следующий раз, когда вы попадете туда, значение $currentcol было увеличено на единицу (в предыдущей строке), поэтому оно равно $maxcols+1, поэтому цикл while не запускается. Следующий цикл во внешнем цикле do теперь пытается получить доступ к $title[ $maxcols+1 ], который не определен.

0 голосов
/ 02 апреля 2012

Ответ:

Такая простая маленькая ошибка, но на $currentcol

сброса не было

Перемещение инициализации вниз прямо под оператором do заставило его работать правильно. Можете ли вы сказать, что уже поздно? хахаха спасибо всем.

$currentrow=1;

do {
$currentcol=0;

$collection->insert(array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
$currentcol++;
while ($currentcol<=$maxcols){
$newdata = array('$set' => array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
$currentcol--;
$collection->update(array($title[$currentcol] => $myarray[$currentrow][$currentcol]), $newdata);
$currentcol++;
$currentcol++;

}
$currentrow++;

} while ($currentrow<=$maxrow);
0 голосов
/ 02 апреля 2012

Попробуйте это:

$maxcols = $numofcols-1; //=9
$maxrow = count($myarray)-1; //=44
$currentcol=0;
$currentrow=1;
do {
    if ($currentcol<9)
    {
         $collection->insert(array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
         $currentcol++;
         while ($currentcol<=$maxcols){
             $newdata = array('$set' => array($title[$currentcol] => $myarray[$currentrow][$currentcol]));
             $currentcol--;
             $collection->update(array($title[$currentcol] => $myarray[$currentrow][$currentcol]), $newdata);
             $currentcol++;
             $currentcol++;
         }
         $currentrow++;
    }

} while ($currentrow<=$maxrow);
0 голосов
/ 02 апреля 2012

$currentrow инициализируется значением 1.Если ваш массив содержит только один элемент, он имеет индекс 0, поэтому вы получаете ошибку «Индекс выходит за границы».

Кроме того, вы определяете количество столбцов один раз в глобальном масштабе (за пределамиwhile петля для строк).Возможно, вам следует определить количество столбцов для каждой строки непосредственно перед циклом по столбцам.

Кроме того, вы не сбрасываете переменную индекса столбца в 0, вы просто продолжаете увеличиваться.Что приводит к ошибке во второй строке, так как вы начинаете с индекса столбца, который не существует.

Подозревать, что PHP не разрешает цикл while внутри цикла while, - нонсенс.Вложенные циклы используются очень часто - нужно просто правильно выполнить условие

...