Вы могли бы сделать что-то вроде этого, как вы упомянули, вы знаете, как использовать array_chunk();
Давайте рассмотрим упрощение процесса с помощью встроенной функции PHP с именем array_chunk();
Мы будем использовать HTML столы для дизайна, который не рекомендуется. Задача лучше выполняется с помощью CSS, вы можете следовать тем же путем без HTML и CSS.
Наш стол:
id datePosted firstName lastName pictureName anotherColumn
1 2013-07-01 John Smith SmithJohn.jpg anotherValue
2 2013-05-06 Elroy Johnson JohnsonElroy.jpg anotherValue
3 2013-06-18 Jake Bible BibleJake.jpg anotherValue
4 2013-07-17 Steve Stevenson StevensonSteve.jpg anotherValue
5 2013-04-08 Bill Smith SmithBill2.jpg anotherValue
Building HTML Tables
Запрос PDO используется для получения информации базы данных с подготовленными операторами. Обратите внимание, что l oop генерирует только код для отображения столбцов. Тесты для определения того, где строки начинаются и заканчиваются, не нужны.
//INITIALIZE VARIABLES
$colsToDisplay = 3;
$htmlOutput = array();
//GET PICTURE LIST
$sql = "SELECT datePosted, firstName, lastName, pictureName FROM pictureList ORDER BY datePosted DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$htmlOutput[] = "<td><img src='images/{$row['pictureName']}' alt='' /><br />{$row['firstName']} {$row['lastName']}</td>";
}
После выполнения l oop массив, содержащий информацию о столбце, можно разбить на группы по три ... или любое другое значение было присвоено $colsToDisplay
, Что мы здесь сделали? мы убираем 3 столбца из таблицы, поэтому разделим таблицу на две части.
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
//...
}
//BREAK THE COLUMNS INTO GROUPS
$htmlOutput = array_chunk($htmlOutput, $colsToDisplay);
Осталось только отобразить информацию таблицы , Обратите внимание, что array_chunk () создает многомерный массив. Foreach l oop используется для обработки групп столбцов. Каждой группе присваивается $currRow
, который содержит массив столбцов для текущей строки. Функция implode () используется для быстрого отображения столбцов в виде строки.
Продолжаем:
//BREAK THE COLUMNS INTO GROUPS
$htmlOutput = array_chunk($htmlOutput, $colsToDisplay);
//DISPLAY TABLE
print '<table>';
foreach($htmlOutput as $currRow) {
print '<tr>' . implode('', $currRow) . '</tr>';
}
print '</table>';
Проверка Для отсутствующих тегов столбцов
Одна вещь, которую вы, возможно, заметили, - это код для добавления отсутствующих столбцов. Другими словами, этот пример приводит к таблице HTML, в которой последняя строка содержит только два столбца.
Очевидно, что пропущенные столбцы не нужны в соответствии с W3 C Службой проверки разметки … поэтому они не были включены. Однако их можно добавить, выполнив следующий код непосредственно перед вызовом array_chunk()
.
$colsDifference = count($htmlOutput) % $colsToDisplay;
if($colsDifference) {
while($colsDifference < $colsToDisplay) {
$htmlOutput[] = '<td></td>';
$colsDifference++;
}
}
Окончательный код:
//INITIALIZE VARIABLES
$colsToDisplay = 3;
$htmlOutput = array();
//GET PICTURE LIST
$sql = "SELECT datePosted, firstName, lastName, pictureName FROM pictureList ORDER BY datePosted DESC";
$stmt = $pdo->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$htmlOutput[] = "<td><img src='images/{$row['pictureName']}' alt='' /><br />{$row['firstName']} {$row['lastName']}</td>";
}
//OPTIONAL CODE
//IF NEEDED, ADD MISSING COLUMNS
$colsDifference = count($htmlOutput) % $colsToDisplay;
if($colsDifference) {
while($colsDifference < $colsToDisplay) {
$htmlOutput[] = '<td></td>';
$colsDifference++;
}
}
//END: OPTIONAL CODE
//BREAK THE COLUMNS INTO GROUPS
$htmlOutput = array_chunk($htmlOutput, $colsToDisplay);
//DISPLAY TABLE print '<table>';
foreach($htmlOutput as $currRow) {
print '<tr>' . implode('', $currRow) . '</tr>';
}
print '</table>';
Идея За этим учебным пособием:
- Вам не нужно создавать файл и записывать в него массивы для отображения в виде данных.
- Если вы все еще хотите это сделать (разделите таблицу из двух частей) создать два массива и записать их в файл, а затем использовать
array_push();
или array_merge();
, чтобы объединить оба массива в один. Надеюсь, что это поможет вам в вашей жизни кодирования:)