За последние 24 часа нас посетили 6596 программистов и 529 роботов. Сейчас ищут 198 программистов ...

Таблица на PHP

Тема в разделе "Сделайте за меня", создана пользователем GLF280, 24 окт 2018.

  1. GLF280

    GLF280 Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    2
    Симпатии:
    0
    Пытаюсь нарисовать таблицу, ячейки которой пронумерованы от 1 до 60 (4 столбца и 15 строк).
    У меня выводит нумерацию как 1 1 1 1 потом 2 2 2 2 и так до 15.

    Подскажите пожалуйста...

    PHP:
    1. $cols = 4;
    2. $rows = 15;
    3.  
    4. echo "<table border=\"1\">";
    5.  
    6. for($i=1;$i<=$rows;$i++) {
    7.  
    8. echo "<tr>";
    9.  
    10. for ($z=1; $z<=$cols; $z++){
    11.  
    12. echo "<td>".$i."</td>";
    13.  
    14. }
    15.  
    16. echo "</tr>";
    17.  
    18. }
    19.  
    20. echo "</table>";
     
  2. Artur_hopf

    Artur_hopf Новичок

    С нами с:
    7 май 2018
    Сообщения:
    152
    Симпатии:
    15
    математику в школе не надо было прогуливать :p
    и экран можно не использовать изменив кавычки:
    PHP:
    1. echo '<table border="1">';
     
  3. FudziKama

    FudziKama Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    Так а для вывода нумерации колонок почему используешь ту же переменную $i, когда под это дело заточил переменную $z? Но даже если ты заменишь во втором цикле в выводе $i на $z у тебя не получится желаемого. У тебя просто в каждой строчке таблицы будет "1 2 3 4". Нужно менять алгоритм, т.е. у тебя во внутреннем цикле должна быть третья переменная, например $y, которая в самом начале инициализируется $y = 1; и дальше, после каждого вывода в ячейку таблицы, инкрементируется, т.е. $y++. Вот тогда получишь желаемое - сквозную нумерацию всех ячеек таблицы.
     
    #3 FudziKama, 25 окт 2018
    Последнее редактирование: 25 окт 2018
  4. Artur_hopf

    Artur_hopf Новичок

    С нами с:
    7 май 2018
    Сообщения:
    152
    Симпатии:
    15
    @GLF280 если не сможешь сам, то напишем ответ =) но тут все как написал @FudziKama =)
     
  5. FudziKama

    FudziKama Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    Можно даже сэкономить на одной переменной, т.е. не вводить $y, а значения в ячейках формировать как:
    PHP:
    1. ($i - 1) * $cols + $z
     
  6. Artur_hopf

    Artur_hopf Новичок

    С нами с:
    7 май 2018
    Сообщения:
    152
    Симпатии:
    15
    да чего мудрить уж =))
    PHP:
    1. $cols = 4;
    2. $rows = 15;
    3. $y=1;
    4. echo '<table border="1">';
    5.  
    6. for($i=1;$i<=$rows;$i++) {
    7.    
    8.     echo "<tr>";
    9.  
    10.     for ($z=1; $z<=$cols; $z++){
    11.        
    12.         echo "<td>".$y."</td>";
    13.         $y++;
    14.     }
    15.     echo "</tr>";
    16. }
     
  7. FudziKama

    FudziKama Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    Или такой вариант )
    PHP:
    1. $cols = 4;
    2. $rows = 15;
    3. $i=1;
    4.  
    5. $cell_num = $rows * $cols;
    6.  
    7. echo "<table border='1'>";
    8.  
    9. while($i <= $cell_num){
    10.   if($i == 1) echo "<tr>"; // при первом проходе выводим открывающий тег строки
    11.  
    12.   echo "<td>$i</td>";      // собственно выводим ячейку таблицы
    13.  
    14.   if(($i % $cols) == 0){   // если $i дошло до значения кратного количеству столбцов, то
    15.     echo "</tr>";          // закрывающий тег строки
    16.     if($i < $cell_num) echo "<tr>"; // и тут же открывающий тег строки, кроме самого последнего значения $i, т.к. больше строк не будет
    17.   }
    18.      
    19.   $i++;                    // инкрементируем $i
    20. }
    21.  
    22. echo "</table>";
     
    #7 FudziKama, 25 окт 2018
    Последнее редактирование: 25 окт 2018
  8. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Я извиняюсь, но при данном подходе есть вероятность того что в таблице может быть кол-во пустых значений в конце таблицы а это не учитывается. Корявая таблица получится в таком случае. Нужно установить сколько надо строк с тегом <tr> - полученное число округлить в большую сторону, а сколько должно быть столбцов мы знаем. Отсюда и рисовать таблицу. $rows - должна быть равна кол-ву записей значит высчитываем переменную скажем $cell_num_tr=ceil($rows/$cols) - мы получили кол-во строк в таблице с учетом даже если последние ячейки будут пустыми. Теперь делаем вывод значений по примеру, при этом учитываем факт того что значение может быть пустым если так то выводим что-то.
     
  9. FudziKama

    FudziKama Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    Поясните, пожалуйста, откуда такой вывод. В предложенном алгоритме осуществляется проход исключительно по всем ячейкам таблицы, количество которых рассчитано на заданном количестве столбцов и строк. Таким образом, ни одна ячейка не будет пропущена.
    Далее
    зачем это устанавливать, если это установлено изначально переменной $rows?
    Предложенная Вами формула
    вообще непонятна, что это значит: количество рядов (строк) разделить на количество столбцов? Это что вообще с реальной точки зрения нам дает? Я так понимаю, что Вы немного не разобрались в исходных, изначальных данных, приняв переменную $rows за что-то другое, нежели количество строк (рядов)
     
    #9 FudziKama, 31 окт 2018
    Последнее редактирование: 31 окт 2018
  10. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    FudziKama я же пояснил переменная $rows это количество значений хранящихся в БД. Приведенная мною формула высчитывает сколько в таком случае получится строк у таблицы. Остается только расставить значения по циклам и сделать вывод. А при предыдущем подходе нужно сразу знать сколько строк у таблицы будет.
     
  11. FudziKama

    FudziKama Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    @victort в том-то и вопрос, что Вы не пояснили этого в своем первом посте, а изначально заявили, что
    и фактически переиначили задачу.

    Обратитесь к изначальному вопросу, там четко говорится
    и предложенное мной решение в точности соответствовало поставленной задаче.
     
  12. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    FudziKama то что вы рассчитали в точности исходя из условий это отлично, но мы же с вами программисты а значит должны думать дальше поставленных задач. Если исполнять в точности то что хочет заказчик (в данном случае автор) извини но на практике один и тот же код приходится тогда переписывать постоянно поэтому я привык думать на несколько задач вперед чтобы в дальнейшем не переписывать то что уже написал а если вдруг и переписываю то только в том случае когда нашел решение которое оптимизирует то что я написал раньше. Поэтому я и написал пост указывая что данный подход не является совершенством - и минус заключается в том что кол-во записей может изменится стать больше либо меньше, ну и кол-во столбцов тоже могут в какой-то момент увеличить или уменьшить. В общем в данном случае я просто постарался объяснить минус данного подхода.
    Ну и если ты доработаешь код то получишь еще один плюс в любой ячейке твое значение может быть равно тогда пустоте просто этой пустоте ты можешь сразу присвоить значение из вне скажем если все значения цифровые то логично присвоить ему 0.
     
  13. FudziKama

    FudziKama Новичок

    С нами с:
    24 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    @victort количество записей (строк, рядов) и количество столбцов в коде есть переменные, т.е. если по расширению задачи возникает необходимость как-то их менять, то флаг вам в руки, в целом реализация алгоритма изначальной задачи никак от этого не пострадает. Вы абсолютно некорректно изначально изменили суть переменной $rows и, как следствие, суть постановки задачи и пытаетесь на основании этого вещать, что где-то в реализации есть минусы.

    В итоге, Вы не минусы объяснили, а, так, любого стороннего читателя сбили с толку, даже не потрудившись объяснить:
    1. Откуда вдруг в обсуждаемом коде появляются пустые ячейки, если цикл проходит по всем(!) ячейкам: while($i <= $cell_num)
    2. Что это за формула такая Вами приведена $cell_num_tr=ceil($rows/$cols). Если ориентироваться на изначальную суть переменных, то это просто бред "программиста, думающего дальше поставленной задачи". А если это переменные, имеющие иную суть, то хотя бы постараться описать, объяснить, что под ними подразумевается, и тогда самому понять, как от этого изменилась суть задачи.

    Ну и как заключение:
    Когда вокруг тебя летает муха, не стоит думать, что на тебя бежит слон. В противном случае, со стороны это покажется если не странностью, то сумасшествием.
     
  14. Valick

    Valick Новичок

    С нами с:
    12 авг 2018
    Сообщения:
    398
    Симпатии:
    81
    PHP:
    1. <?php
    2. ini_set('display_errors', 'On');
    3. header('Content-Type: text/html; charset=utf-8');
    4. echo 'Первый вариант <hr />';
    5. // Вывод массива в N-колонок
    6. // Исходный массив, который может быть получен и из БД
    7. $arr = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17'];
    8. // Количество выводимых колонок
    9. $col = 7;
    10. // Счётчик итераций
    11. $ci  = 0;
    12. $arr = array_merge($arr , array_fill(count($arr), $col - (count($arr) % $col), '**'));
    13. $out = '<table border="1"><tr>';
    14. foreach($arr as $key=>$value) $out .= ($ci++ % $col)
    15.                                         ? '<td>' . $arr[$key] . '</td>'
    16.                                         : '</tr><tr><td>' . $arr[$key] . '</td>';
    17. $out .= '</tr></table>';
    18. echo $out;
    19. echo 'Второй вариант (больше подходит для работы с результатом выборки из БД) <hr />';
    20. // Вывод массива в N-колонок
    21. // Исходный массив, который может быть получен и из БД
    22. $arr = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17'];
    23. // Количество выводимых колонок
    24. $col = 5;
    25. // Счётчик итераций
    26. $ci  = 0;
    27. $out = '<table border="1"><tr>';
    28. // Если данные из БД этот цикл легко заменить на while()
    29. foreach($arr as $key=>$value) $out .= ($ci++ % $col)
    30.                                         ? '<td>' . $arr[$key] . '</td>'
    31.                                         : '</tr><tr><td>' . $arr[$key] . '</td>';
    32. foreach(array_fill(count($arr), $col - (count($arr) % $col), '**') as $value) $out .= '<td>' . $value . '</td>';
    33. $out .= '</tr></table>';
    34. echo $out;
     
  15. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    FudziKama я написал пост основываясь на практику. Если считаете что я некорректно вас поправил это ваше право. Тот кто будет читать данный пост теперь увидит минусы данного подхода а именно если у него возникнет точно такая же задача и почему-то ваш вариант его не устраивает на 100 % то увидит почему. В общем я предложил улучшить ваш подход вы отказались - ничего страшного я в этом не вижу но тем у кого будет такая же задача я сообщил да и вы подтвердили что данный подход решит только данную задачу но не похожую.
     
  16. Catrinblaidd

    Catrinblaidd Новичок

    С нами с:
    21 окт 2018
    Сообщения:
    8
    Симпатии:
    2
    PHP:
    1. $cols = 4;
    2. $rows = 15;
    3. $count = 1;
    4. echo '<table border="1">';
    5.   for($i = 1; $i <= $rows; $i++) {
    6.     echo '<tr>';
    7.     for ($z = 1; $z <= $cols; $z++) {
    8.       echo '<td>' . $count++ . '</td>';
    9.     }
    10.     echo '</tr>';
    11.   }
    12. echo '</table>';
    PHP:
    1. $cols = 4;
    2. $rows = 15;
    3. echo '<table border="1">';
    4.   for($i = 1; $i <= $rows; $i++) {
    5.     echo '<tr>';
    6.     for ($z = 1; $z <= $cols; $z++) {
    7.       echo '<td>' . ($z + ($i-1) * $cols) . '</td>';
    8.     }
    9.     echo '</tr>';
    10.   }
    11. echo '</table>';