В цикле объединить ячейки таблицы

maximillian77

Новичок
Ребята, подскажите, пожалуйста, как в цикле объединить ячейки, на которые допустим укажут входные значения ? Есть допустим таблица 4*4, в функцию приходит какой-нибудь массив $a = array(1,2,5,6), как объединить 1,2,5,6 ячейки ?
То что rowspan или colspan я в курсе, но как это сделать чтобы корректно работало и отображалось так как нужно не могу найти решение ...
 

С.

Продвинутый новичок
Какое еще нафиг "решение"? Надо просто тупо и аккуратно расставлять rowspan или colspan. Потренеруйся сначала на статических таблицах, как работают эти атрибуты.
как объединить 1,2,5,6 ячейки ?
Это как, четыре в одну? Или все-таки как-то так: array(array(1,2),array(5,6))? Зачем усложнять себе жизнь нечетко передаваемыми данными?
 

maximillian77

Новичок
С., парень, я прекрасно знаю как работает rowspan или colspan, но беда в том, что мучаюсь уже 3 часа и не могу никак найти решение, которое позволит передавать в функцию допустим вот такой массив

array(
array( 'cells' => '4,5')
, array( 'cells' => '7,8');

и на клиенте получить таблицу, где указанные ячейки будут объединены..
 

С.

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

array(
array( 'cells' => '4,5')
, array( 'cells' => '7,8');
Бедняжка! Так прямо и передавай, не бойся функция не скукожится от такого параметра и массив не рассыплется.

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

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну так на чем порешили?
 

maximillian77

Новичок
c0dex, посоветуйте пожалуйста, как можно хоть примерно решить вопрос...

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




array(
array( 'cells' => '4,5'),
array( 'cells' => '7,8');
красит ячейки и собственно выводит таблицу... Осталось сделать, что бы ячейки из одного подмассива объединялись..
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
maximillian77, если тебе надо объединить ячейки с 4 по 5ю, то тут все просто, имеешь счет от которой начинать, то есть от 4й, и разницу между 5 и 4, то есть 1, значит надо покрасить 1+1 ячейки, то есть colspan=2. Это если я правильно понял.
 

maximillian77

Новичок
c0dex,привет, спасибо за ответ! Я не могу нащупать принцип, который мне позволит объединять любые варианты ... а вдруг допустим нужно будет объединить 1,2,4,5 и 8,9 ... Тогда мне нужно будет прикинуть, что в подмассиве 4 числа, значит под объединение попадает 4 ячейки, 2,4,5 мы не выводим, а в 1 первой пишем colspan="2" и rowspan="2", не пойму как это структурировать ...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
maximillian77, правильно, считаем количество ячеек между началом массива и концом, и пишем в перкой ячейке, с которой массив начинается, то есть в 1й - нужный colspan. Про rowspan я не писал ничего, при чем тут он вообще.
 

maximillian77

Новичок
Про rowspan я не писал ничего, при чем тут он вообще.
c0dex, просто, если мы используем только гориз. объединение, то на выходе будет фигня, а не таблица, поэтому, что бы получилась одна ячейка, состоящая из 4 четырёх, нужно объединить две по горизонтали и две по вертикали .... Я думаю так, может я что-то не понимаю ...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
maximillian77, да, не понимаешь, просто не надо писать лишние <td>, вместо них надо писать правильный colspan
 

maximillian77

Новичок
Если допустим у меня есть таблица 3х3 и я хочу сделать, что бы ячейки 1,2,4,5 были совмещены в одну и ячейки 8,9 в одну, то я пищу следующий код...

HTML:
<table border="1" width="100%" height="100%" cellspacing="0">
        <tr>
            <td colspan="2" rowspan="2">1</td>
            <td>3</td>
        </tr>
        <tr>
            <td>6</td>
        </tr>
        <tr>
            <td>7</td>
            <td colspan="2">9</td>
        </tr>
    </table>
Я не могу понять, как я могу обойтись без rowspan... c0dex, просвети пожалуйста!
 

ksnk

прохожий
Представь, что у тебя есть массив
PHP:
[
   ['row'=>1,'col'=>1,'val'=>'1','colspan'=>1,'rowspan'=>1],
   ['row'=>1,'col'=>2, 'val'=>'2','colspan'=>1,'rowspan'=>1], ...     // первая строка

   ['row'=>4,'col'=>1, 'val'=>'13','colspan'=>1,'rowspan'=>1],
   ['row'=>4,'col'=>2, 'val'=>'14','colspan'=>1,'rowspan'=>1], ...     // четвертая строка
]
Если написано, что ячейки 1 и 2 объединяются, нужно найти ячейку 2, в ее colspan и rowspan записать 0, найти ячейку 1 и в ее colspan записать максимальное значение из старого colspan и разницы col этих ячеек +1. В rowspan записать максимальное значение из старого rowspan и разницы значений row+1.

Чтобы собрать таблицу - пробегаешь по всем значениям. Если значение row поменялось, по сравнению с предыдущим - нужно добавить </tr><tr>. Если colspan==0 - не нужно выводить. Если значения colspan или rowspan не равны 1 - из нужно вывести в виде атрибутов в <td>

Так понятнее?
 

maximillian77

Новичок
И непонятно, как объяснить машине когда менять colspan, когда rowspan... ведь входные значения могут быть абсолютно разные... Допустим есть 3*3 таблица и может прийти как

PHP:
array(
array( 'cells' => '1,4,7'),
array( 'cells' => '5,6');
так и
PHP:
 array(
array( 'cells' => '1,2,3'),
array( 'cells' => '7,8');
Не могу разобраться к сожалению .. :(
 

ksnk

прохожий
Начнем с того, что у тебя задача берется с середины. Ни входящие данные не зафиксированы, ни зачем это нужно не объяснено.
Итак - для чего это нужно, как предлагается делать, в каком виде что указано?
 
Сверху