БлогNot. PHP: двумерная таблица с любым содержимым

PHP: двумерная таблица с любым содержимым

Функция tab ($rows, $cols, $callback) просто строит таблицу размерностью $rows строк на $cols столбцов, заполняя её формулой, взятой из вызова callback-функции. Подобные решения на интерпретируемых языках следует применять всегда, если мы хотим использовать гибкие аналоги указателей на функции или функций-делегатов в языках компилируемых. Кроме того, функция не выводит, а просто возвращает строку с содержимым - ведь её использование не обязательно предполагает вывод содержимого в браузер.

Чтобы табулирование было таким же "универсальным", как на Mathcad, передадим третьим аргументом в функцию tab безымянную callback-функцию от аргументов $i, $j, определяющую, какое значение печатать в ячейке с соответствующими координатами.

В нашем случае печатается просто сумма номеров строки и столбца, отсчитываемых с нуля, а заполнить ячейки таблицы 3 x 3 обычными пробелами мы могли бы так:

echo tab (3, 3, function ($i, $j) { return ' '; } );

Стиль документа - примерно как здесь, таблица без табличных тегов, но на разделах. Ниже показан полный документ .php в кодировке Юникода utf-8.

<!doctype html>
<html lang="ru">
 <head>
  <meta charset="utf-8">
  <title>Таблица</title>
  <style>
   .mytab, .myrow, .mycell { 
     border: 1px solid black;
     border-collapse: collapse; 
     padding: 4px; 
   } 
   .mytab { 
    margin: auto; 
    display: table; 
   }	
   .myrow { 
    display: table-row; 
   }
   .mycell { 
    display: table-cell; 
    text-align: center; 
    min-width: 40px; 
   }
  </style> 
 </head> 
 <body>

<?php
function tab ($rows, $cols, $callback) {
 $content = '<div class="mytab">'; //таблица - класс mytab
 for ($i=0; $i<$rows; $i++) {
  $content .= '<div class="myrow">'; //строка - класс myrow
  for ($j=0; $j<$cols; $j++) //ячейка - класс mycell
   $content .= '<div class="mycell">'.$callback($i,$j).'</div>';	 
  $content .= '</div>';
 }
 return $content.'</div>'; //вернем результат как строку с разметкой
}
echo tab (5, 5, function ($i,$j) { return $i+$j; } ); 
 //3-й аргумент - callback-функция с формулой для заполнения ячеек
?>
 </body>
</html>
Вид этой странички в браузере
Вид этой странички в браузере

теги: php учебное

02.10.2019, 12:11; рейтинг: 37