Отобразить массив строк, сгруппированных в таблице с равными по высоте столбцами [закрыто]

Вопрос или проблема

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

Я все еще нахожусь на стадии концепции, прежде чем программировать это, и заголовки букв по центру создают мне проблемы. По визуальным причинам они не должны находиться в самом начале и в самом конце столбца. Если я хочу рассчитать максимальную высоту всех столбцов, я пока не знаю, где будут эти буквы. Они удаляются в начале столбцов, потому что заголовок столбца уже существует. И они также не должны находиться в конце, как в примере с ‘S’. В этом случае мне придется увеличить общую высоту столбцов на 1 и перестроить таблицу, но тогда может случиться так, что буква окажется в конце других столбцов, и в худшем случае я окажусь в бесконечном цикле.

A-De Do-G H-K L-Oc Or-R
Ant Dog Hat Lamp Orange
Apple E I Lion P
B Egg Ice M Penguin
Ball Elephant Island Monkey Piano
Bridge F J Mountain Q
C Fish Jack N Question
Car Flower Juice Nest R
Cat G K Nose Rabbit
D Garden Kite O Rose
Desk Goat King Ocean S (ОШИБКА)
$words = [
    "Ant",
    "Apple",
    "Ball",
    "Bridge",
    "Car",
    "Cat",
    "Desk",
    "Dog",
    "Egg",
    "Elephant",
    "Fish",
    "Flower",
    "Garden",
    "Goat",
    "Hat",
    "Ice",
    "Island",
    "Jack",
    "Juice",
    "Kite",
    "King",
    "Lamp",
    "Lion",
    "Monkey",
    "Mountain",
    "Nest",
    "Nose",
    "Ocean",
    "Orange",
    "Penguin",
    "Piano",
    "Question",
    "Rabbit",
    "Rose",
    "Snake",
    "Sun",
    "Tiger",
    "Tree",
    "Umbrella",
    "Van",
    "Victory",
    "Water",
    "Whale",
    "Xylophone",
    "Yellow",
    "Yard"
    "Zoo",
];

Ответ или решение

Группировка массива строк в таблицу с равновысокими колонками

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

Постановка задачи

Основная цель — отсортировать массив строк в алфавитном порядке и организовать их в таблицу с заданным количеством колонок (X). При этом:

  • Колонки должны быть одинаковой высоты, кроме правой, которая может быть короче.
  • Заголовки колонок не должны находиться в начале и конце столбцов.
  • Существует вероятность зацикливания, если длина колонн не будет учтена должным образом.

Пример данных

Давайте использовать следующий массив слов:

$words = [
    "Ant", "Apple", "Ball", "Bridge", "Car", "Cat", "Desk",
    "Dog", "Egg", "Elephant", "Fish", "Flower", "Garden", 
    "Goat", "Hat", "Ice", "Island", "Jack", "Juice", "Kite", 
    "King", "Lamp", "Lion", "Monkey", "Mountain", "Nest", 
    "Nose", "Ocean", "Orange", "Penguin", "Piano", "Question", 
    "Rabbit", "Rose", "Snake", "Sun", "Tiger", "Tree", "Umbrella", 
    "Van", "Victory", "Water", "Whale", "Xylophone", "Yellow", 
    "Yard", "Zoo",
];

Алгоритм решения

  1. Сортировка массива: Начнем с сортировки массива слов в алфавитном порядке.
  2. Определение количества колонок и их высоты: В зависимости от количества строк и необходимых колонок, определите максимальное количество строк в каждой колонке.
  3. Группировка слов по колонкам: Создайте многомерный массив для группировки данных в колонки.
  4. Добавление заголовков: Заголовки добавляются в заранее определенные позиции.
  5. Формирование таблицы: Сформируйте HTML-код для вывода полученной таблицы.

Пример реализации на PHP

Вот пример кода, который реализует указанный алгоритм:

$words = [
    "Ant", "Apple", "Ball", "Bridge", "Car", "Cat", "Desk",
    "Dog", "Egg", "Elephant", "Fish", "Flower", "Garden", 
    "Goat", "Hat", "Ice", "Island", "Jack", "Juice", "Kite", 
    "King", "Lamp", "Lion", "Monkey", "Mountain", "Nest", 
    "Nose", "Ocean", "Orange", "Penguin", "Piano", "Question", 
    "Rabbit", "Rose", "Snake", "Sun", "Tiger", "Tree", "Umbrella", 
    "Van", "Victory", "Water", "Whale", "Xylophone", "Yellow", 
    "Yard", "Zoo",
];

$columns = 5; // Количество колонок
sort($words); // Сортировка массива

// Группа слов по колонкам
$wordsGrouped = [];
$height = ceil(count($words) / $columns);

for ($i = 0; $i < $height; $i++) {
    for ($j = 0; $j < $columns; $j++) {
        $index = $i + $height * $j;
        if (isset($words[$index])) {
            $wordsGrouped[$j][$i] = $words[$index];
        }
    }
}

// Формирование вывода
echo "<table border='1'><thead><tr>";
$headers = ['A-De', 'Do-G', 'H-K', 'L-Oc', 'Or-R'];
foreach ($headers as $header) {
    echo "<th>$header</th>";
}
echo "</tr></thead><tbody>";

for ($i = 0; $i < $height; $i++) {
    echo "<tr>";
    for ($j = 0; $j < $columns; $j++) {
        echo "<td>" . (isset($wordsGrouped[$j][$i]) ? $wordsGrouped[$j][$i] : "") . "</td>";
    }
    echo "</tr>";
}

echo "</tbody></table>";

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...