Создать таблицу, используя только PHP из массива значений

Я должен распечатать таблицу с использованием TCPDF для создания PDF-файла с использованием PHP из массива содержимого.

В моем примере я использую 7 записей, но их может быть больше или меньше.

$array = array(
 0 => "[ ] Option 1",
 1 => "[x] Option 2",
 2 => "[ ] Option 3",
 3 => "[ ] Option 4",
 4 => "[x] Option 5",
 5 => "[ ] Option 6",
 6 => "[ ] Option 7",
 ...
);

Макет моей таблицы динамический: я могу установить количество столбцов для отображения ($num_cols может быть 1, 2, 3 или 4 столбца)

Основываясь на моем $ num_cols, я разделил содержимое массива в каждой ячейке TD.

Итак, если я установил $num_cols = 4, мне нужно показать что-то вроде этого:

<table>
  <tr>
    <td>[ ] Option 1</td>
    <td>[x] Option 2</td>
    <td>[ ] Option 3</td>
    <td>[ ] Option 4</td>
  </tr>
  <tr>
    <td>[x] Option 5</td>
    <td>[ ] Option 6</td>
    <td>[ ] Option 7</td>
    <td></td>
  </tr>
</table>

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

echo "<table>";
echo "<tr>";

for ( $i = 0; $i < $num_cols; $i++ ) {

 echo "<td>";
 if ( isset($array[$i]) {echo $array[$i];} else {}
 echo "</td>";

}
echo "</tr>";
echo "</table>";

Боковое примечание: вам не нужны пустые операторы else. Вы можете избавиться от своего "else {}".

Kishlin 30.10.2018 17:58

Похоже, вы хотите исследовать вложенные циклы.

Andy G 30.10.2018 18:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

кусок массива поможет вам:

<?php
$num_cols = 4;
$array = [1,2,3,4,5,6,7,8];

echo "<table>";
foreach (array_chunk($array, $num_cols) as $chunk) {
    echo "<tr>";
    foreach ($chunk as $item) {
        echo "<td>";
        echo $item;
        echo "</td>";
    }
    echo "</tr>";
}
echo "</table>";

и вы можете использовать другие крутые штуки с php :)

<?php
$num_cols = 4;
$array = [1,2,3,4,5,6,7,8];

echo "<table><tr><td>" .
    implode("</td></tr><tr><td>",
        array_map(function(array $part) {
            return implode('</td><td>', $part);
        }, array_chunk($array, $num_cols))
    )
. "</td></tr></table>";
<?php
$array = array(
 0 => "[ ] Option 1",
 1 => "[x] Option 2",
 2 => "[ ] Option 3",
 3 => "[ ] Option 4",
 4 => "[x] Option 5",
 5 => "[ ] Option 6",
 6 => "[ ] Option 7"
);
$num_cols = 4;

//Use $i as a counter
$i = 0;
echo '<table>';
foreach ($array as $key => $val) {
    //If we are outputting the first column in a row, create a new tr tag
    if ($i % $num_cols == 0)
        echo '<tr>';

    //Output the column
    echo '<td>' . $val . '</td>';

    //If we are at the end of the number of columns, close the tr tag
    if ($i % $num_cols == 3)
        echo '</tr>';
    $i++;
}

//If we didn't close the tr tag in the loop, close it now
if ($i % $num_cols != 0)
    echo '</tr>';
echo '</table>';
?>

Слишком тяжело для простой задачи. Вы должны использовать существующие функции php, которые здесь, чтобы помочь вам, вместо того, чтобы пытаться воссоздать то, что кто-то уже реализовал. См. Другой ответ с помощью array_chunk.

Kishlin 30.10.2018 18:00

Да, я мог бы использовать array_chunk, но я нашел правильное решение и без него. Тот факт, что я не использую встроенную функцию, не означает, что я должен быть отвергнут ...

Mic1780 30.10.2018 18:01

Речь идет не о том, чтобы не использовать собственные функции. Здесь на карту поставлена ​​удобочитаемость. Ваш код намного труднее понять, когда другое решение неявно на первый взгляд.

Kishlin 30.10.2018 18:07

Это смешно. Учитывая, что у меня есть комментарии в моем коде, ТОЧНО объясняющие, что происходит. В отличие от другого решения. Посмотрите на второй блок кода этого решения. Читать сложнее, чем мою.

Mic1780 30.10.2018 18:10

ставлю тебе плюс @ Mic1780 ^ _ ^ мир!

myxaxa 30.10.2018 18:14

Ага. Я имею в виду. Мы часто говорим, что лучший комментарий - это тот, который вам вообще не приходилось писать. Что на самом деле может иметь большой смысл, когда вы в конечном итоге пишете больше комментариев, чем код.

Kishlin 30.10.2018 18:21

Я не вижу ничего плохого в этом ответе. Он изменяет код OP и дает ожидаемые результаты. Комментарии никогда не бывают плохими (если они имеют смысл). Хотя считаю оба ответа хорошими.

nocturns2 30.10.2018 18:29

Другие вопросы по теме