Динамическое объединение ячеек таблицы средствами php - PHP

kittycat_13

Новичок
Здравствуйте! Надо написать функцию, которая будет генерировать html-таблицу по заданным параметрам. На вход функции подается двумерный массив вида

$style = array(
array('cells' => '1,2,4,5')
, array('cells' => '8,9')
);

Здесь cells - это номера ячеек, которые нужно объединить в таблице(смотрите во вложениях).

На данный момент, я написала код, который генерирует таблицу. Но я никак не могу понять логику, как сделать такое объединение. Буду благодарна за ваши идеи и помощь!


function getTable($style){


$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
$array_count = count($arr);

$table = '<table border="1"><tr>';

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

if($i % 3 == 0 && $i !=0 ){
$table .= '</tr><tr>';
}

$table .= "<td>".$arr[$i]."</td>";
}


$table .= "</tr></table>"; // close last row and table
echo $table;
}

getTable();
 

Вложения

WMix

герр M:)ller
Партнер клуба
очень не ординарная задачка... можно поинтересоваться откуда она...
возможно есть смысл / возможность ее переделать под результат но с другими параметрами?
думаю про colspan и rowspan ты знаешь и вопрос не о них
 

kittycat_13

Новичок
очень не ординарная задачка... можно поинтересоваться откуда она...
возможно есть смысл / возможность ее переделать под результат но с другими параметрами?
думаю про colspan и rowspan ты знаешь и вопрос не о них
Да, Вы правы) Вот полный текст задания
 

Вложения

kittycat_13

Новичок
Вот и моя проблема в том, что я не понимаю алгоритма что и куда пихать.
 

AnrDaemon

Продвинутый новичок
Интересная задачка. Разбить номер на координаты ячейки можно через модуль 4.
PHP:
$x = $cellNo % 4;
$y = 1 + floor($cellNo / 4);
Дальше, думаю, справишься?
 

kittycat_13

Новичок
Интересная задачка. Разбить номер на координаты ячейки можно через модуль 4.
PHP:
$x = $cellNo % 4;
$y = 1 + floor($cellNo / 4);
Дальше, думаю, справишься?
Спасибо большое) Был у меня и такой вариант. Только я в ручную выставляла. Что-то вроде,
$n[0][0] = 1;
$n[0][1] = 2;
$n[0][2] = 3;
$n[1][0] = 4;
$n[1][1] = 5;
$n[1][2] = 6;
$n[2][0] = 7;
$n[2][1] = 8;
$n[2][2] = 9;
Вот только как мне поможет это впихнуть в объединение?
 

antson

Новичок
Партнер клуба
так и хочется в качестве параметра передать 1,6,7
 

kittycat_13

Новичок
Таким методом я могу закрасить ячейки, а вот как объединить не понимаю(
 

antson

Новичок
Партнер клуба
1. проверка что все ячейки переданные на слияние еще не соединялись
2. проверка что они образуют сплошной прямоугольник
3. удаление ячеек кроме левого - верхнего угла
4 установка ему свойств colspan,rowspan

повторить 1-4

начать таблицу
цикл по строкам
начать строку
цикл по ячейкам
если ячейка существует вывести ее
кцикл
закрыть строку
кцикл
закрыть таблицу
 

antson

Новичок
Партнер клуба
0. проинициализировать кол-во строк на кол-во столбцов ячеек с colspan=1,rowspan=1
 

antson

Новичок
Партнер клуба
нормальное такое тестовое задание. очень простая формулировка . и позволяет оценить насколько алгоритмически готов думать претендент, а не тупо копипастить со стековерфлоу
 

kittycat_13

Новичок
нормальное такое тестовое задание. очень простая формулировка . и позволяет оценить насколько алгоритмически готов думать претендент, а не тупо копипастить со стековерфлоу
Мне кажется, не очень красиво так писать человеку, которого Вы даже не знаете. Возможно оно и простое, я не отрицаю. Но на данный момент мне непонятны некоторые вещи. Все мы когда были новичками и не каждый родился с алгоритмическим умом. Я не просила, чтобы за меня написали код. Просто подсказать дальнейшее развитие действий. Если для Вас это неприемлемо, могли бы и ничего не писать. Для меня это не тестовое задание для устройства на работу, а хороший пример разобраться с таким видом задач.
Большое спасибо за помощь.
P.S. не в обиду никому
 

AnrDaemon

Продвинутый новичок
Котёнок, вас не пытаются оскорбить. Человек прямо высказывает своё мнение. Может, не слишком куртуазно, зато предельно точно.
И я с ним согласен. Тупо скопировать кусок кода, не понимая, как он работает, и не имея возможности его починить или адаптировать к своим условиям - много ума не надо. На это даже обезьяна способна.
А вот понять сам ПРИНЦИП работы приведённого кода и при необходимости написать его на другом языке… (Да, в моей практике бывало и такое, приходилось переписывать алгоритмы на других языках.)
 

antson

Новичок
Партнер клуба
модераторы, перемести тему в корзину.
Все завязываю отвечать в потенциально мусорных темах
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я, блин, слежу за вами...
 

WMix

герр M:)ller
Партнер клуба
Глупость этого задания в том, что в html ожидается 4х угольная ячейка, но данные даны не через две координаты а через набор номеров ячеек. Другими словами из набора нужно выбрать минимум и максимум и перевести в х/у координаты и уже отсюда плясать. иначе с помощью html таблицы задача не решабельная. Вторая сложность таится в возможном пересечении ячеек. Об этом тоже не мешает подумать. Ну а так удачи...
 

Фанат

oncle terrible
Команда форума
Что характерно, все пишущие "P.S. не в обиду" сами обижаются на пустом месте, на абсолютно нейтральные замечания :)
 
Сверху