@maksam07

Как найти номера меньшей таблицы из большей?

Не знаю, как верно задать вопрос, но постараюсь описать лучше.
Есть, к примеру, таблица 7x7, ее ячейки пронумерованы от 1 до 49, что логично. Это ее максимальные размеры, и будем их указывать так:
$maxRow = 7;
$maxCell = 7;

Ну и вывожу я так:
echo '<table><tbody>';
for ( $row = 0, $count = 1; $row < $maxRow; $row++ ){
	echo '<tr>';
	for ( $cell = 0; $cell < $maxCell; $cell++, $count++ ){
		echo '<td>'.$count.'</td>';
	}
	echo '</tr>';
}
echo '</tbody></table>';

16194888.png

А есть пользователь, которому изначально таблица отображается в формате 3х3 (тоже пример), и указываем так:
$pRow = 3;
$pCell = 3;


Задача состоит в том, что нужно найти центральные 3х3 ячейки в таблице 7х7, а то бишь, что бы выводило не от 1 до 9 ячейки, а как на скриншоте:
16194942.png

То есть нужна сама формула расчета этих номеров.
Желательно (но не обязательно), что бы она работала, если таблица не пропорциональна. К примеру 10х8 против 4х2.
  • Вопрос задан
  • 220 просмотров
Решения вопроса 2
@stslam
10х8 (столбцы на строки)
4х2(столбцы на строки)
начальный столбец малой таблицы = (10 - 4)/2
начальная строка малой таблицы = (8 - 2 )/2
последний столбец малой таблицы = (10-4 + 4)/2
последняя строка малой таблицы = (8 - 2 + 2 )/2
Отсюда:
cell[row][col] = Cell[(RowCount - rowcount + row)/2][(ColCount - colcount + col)/2]
Ответ написан
Stalker_RED
@Stalker_RED
C js переведете?
https://jsfiddle.net/v6aveeez/

Задаем размеры таблицы и отступы от края (отдельно по горизонтали и вертикали).
Для каждой строки или ячейки проверяется, находится ли она в зоне отступов.
Можно эти "лишние" ячейки и строки скрывать через css или вообще не выводить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если нумерация строк и колонок начинается с нуля.
Для большой таблицы:
Value = rowNumberBig * widthBig + colNumberBig + 1
Для маленькой:
rowNumberBig = (heightBig - heightSmall) / 2 + rowNumberSmall
colNumberBig = (widthBig - widthSmall) / 2 + colNumberSmall
Остаётся подставить в первую формулу, ну и выбрать правила округления при делении.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы