2016-04-12 2 views
0

Последний вопрос был получен неправильно, поэтому я сделал больше чтения и придумал простую программу php, которая принимает ввод пользователя для количества строк и столбцов. Таблица создается с помощью вложенного цикла while, и я понимаю, что цикл «For» больше подходит для этого и заставил его работать с использованием одного. Пытаться учиться и поправляться, поэтому я хочу тоже это понять. Я получаю только одну строку и никаких столбцов. Я также хочу, чтобы итерация создавала строки и столбцы, которые выглядят как пример. Своего рода разочарование цикла for было намного легче понять.Почему мой вложенный цикл while не генерирует желаемый результат?

W,row1,col1; W,row1,col2; W,row1,col3 
W,row2,col1; W,row2,col2; W,row2,col3 etc... 

код PHP:

<?php 

if(isset($_GET['rows'])) { 



$r = 1; 
$c = 1; 
$rows = 5; 
$cols = 6; 
while ($r <= $rows) { 
     echo '<tr>'; 
     while($c <= $cols) { 
      echo '<td>W, '.'row' .$r.',col'.$c.';</td>'; 
      $c++; 
     } 
     echo '</tr>'; 
     $r++; 
    } 

    ?> 
+0

У вас ничего не отслеживается, сколько циклов вы сделали. Подумайте о том, что делает код, и озвучивайте его словами. '' '$ rows''' всегда одного и того же числа, вам нужно иметь что-то, что уменьшает' '' $ rows''' (и '' '' '' '' '' '' конечно) на каждой итерации цикла, так что в конечном итоге оно больше не будет> = 1. Вам также не хватает запятой на '' '$ count ++' ''. Надеюсь, это поможет. –

+0

спасибо, я собираюсь изменить условие оценки на ($ rows! = 0) и cols то же самое. И, конечно, держите стойку для строк .... спасибо! – allendks45

ответ

1

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

И перед каждой внутренней петлей необходимо повторно инициализировать $cols. В противном случае конечное условие уже будет выполнено после первой итерации внешнего цикла.

$count = 1; 
$rows = $_REQUEST['rows']; 

//while loop to create table 

while ($rows-- >= 1) { 
    echo '<tr>'; 
    $cols = $_REQUEST['cols']; 
    while ($cols-- >= 1) { 
     echo '<td>W,row1,col1;</td>'; 
     $count++ 
    } 
    echo '</tr>'; 
} 
-1

вы можете сделать это следующим образом:

if(isset($_GET['rows'])) { 

//Create counters 

    $count = 1; 
    $rows = $_REQUEST['rows']; 
    $cols = $_REQUEST['cols']; 

    //for loop to create table 

    for($i=1;$i<=$rows;$i++){ 
     echo '<tr>'; 
     for($j=1;$j<=$cols;$j++){ 
      echo '<td>W,'.'row'.$i.',col'.$j.';</td>';   
     } 
     echo '</tr>'; 
    } 
} 
+0

Это не удобный ответ. Правильно отформатируйте свой код и объясните, что вы делаете. – miken32

+0

Я получил его, работая с циклом for выше, и результат был отформатирован правильно. Внесет изменения в цикл while. Смотрел на это почти 3 часа и пропустил полуплотность и должен был использовать ($ rows! = 0). Я уверен с комментариями здесь, я это выясню. Никогда не болит, чтобы получить еще один взгляд на него. – allendks45