Используя PHP DOMDocument, я создаю таблицу, которая должна принимать входные данные из массива данных. Код работает нормально, ожидая, что введенный ряд данных (массив) неверен в результате. Код структурирован для получения X HTML в соответствии с определенной спецификацией, поэтому я не могу изменять способ, которым код таблицы выглядит в конечном файле X HTML.
Причина, по которой я использую Циклы for - это то, что количество ячеек таблицы может растянуться до 80 ячеек, поэтому необходимо уменьшить базовую кодовую область.
Наблюдение [1]:
Я подозреваю причина того, что результат одинаков для каждого столбца, состоит в том, что циклы не увеличиваются правильно, заполняясь тем, что заполняется последним рабочим значением.
Наблюдение [2]:
2 цикла for имеют разное количество итераций, поскольку первым необходимо выполнить итерацию по трем заголовкам в массиве, в то время как последнему l oop необходимо выполнить итерацию 2 раза, чтобы заполнить ячейки для period-0 / balance-0 и period- 1 / баланс-1. Может ли это быть проблемой, если число итераций во вложенных циклах for не совпадает?
Вопрос:
Как исправить код так, чтобы число серия представляется как «требуемый результат»?
Результат - содержимое таблицы (из браузера):
Cash 1 2
Bank 1 2
Credit 1 2
требуемый результат - содержимое таблицы (в браузере) ):
Cash 1 2
Bank 3 4
Credit 5 6
Мой код:
<?php
$data = [
'titles' => ['Cash', 'Bank', 'Credit'],
'period' => [
[1,3,5], // Period [0]
[2,4,6], // Period [1]
],
];
// Create new document
$xml = new DomDocument('1.0', 'UTF-8');
$xml->formatOutput = true;
// Build Base document
$html = $xml->createElement('html', ' ');
$html->setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
$html->setAttribute('xmlns:ix', 'http://www.xbrl.org/2013/inlineXBRL');
$xml->appendChild($html);
$head = $xml->createElement('head', ' ');
$html->appendChild($head);
$style = $xml->createElement('style');
$style->nodeValue = 'table, th, td {border: 1px solid black;}';
$head->appendChild($style);
$body = $xml->createElement('body', ' ');
$html->appendChild($body);
// Build Table
$table = $xml->createElement('table', ' ');
$body->appendChild($table);
$colgroup = $xml->createElement('colgroup', ' ');
$table->appendChild($colgroup);
$thead = $xml->createElement('thead', ' ');
$table->appendChild($thead);
$tbody = $xml->createElement('tbody', ' ');
$thead->appendChild($tbody);
/**
* ---------------------------------------
* Row constructor
* ---------------------------------------
*/
for ($i=0; $i <= 2 ; $i++) {
// Titles
$tr = $xml->createElement('tr', ' ');
$tr->setAttribute('class', 'sep');
$tbody->appendChild($tr);
$td = $xml->createElement('td');
$td->nodeValue = $data['titles'][$i]; // Injecting data from array.
$tr->appendChild($td);
for ($x=0; $x <= 1 ; $x++) {
// Values
$td = $xml->createElement('td', ' ');
$tr->appendChild($td);
$span = $xml->createElement('span', ' ');
$span->setAttribute('class', 'sum');
$td->appendChild($span);
$ix_non_fraction = $xml->createElement('ix:nonFraction');
$ix_non_fraction->nodeValue = $data['period'][$x][0]; // Injecting data from array.
$ix_non_fraction->setAttribute('contextRef', ('balance' . $x));
$span->appendChild($ix_non_fraction);
}
}
// Save & Print
$xml->save("1_result.xhtml");
$xml->save("2_result.xml");
echo $xml->saveXML();
Результат (X HTML):
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ix="http://www.xbrl.org/2013/inlineXBRL">
<head>
<style>
table,
td,
th {
border: 1px solid black;
}
</style>
</head>
<body>
<table>
<colgroup></colgroup>
<thead>
<tbody>
<tr class="sep">
<td>Cash</td>
<td>
<span class="sum">
<ix:nonFraction contextRef="balance0">1</ix:nonFraction>
</span>
</td>
<td>
<span class="sum">
<ix:nonFraction contextRef="balance1">2</ix:nonFraction>
</span>
</td>
</tr>
<tr class="sep">
<td>Bank</td>
<td>
<span class="sum">
<ix:nonFraction contextRef="balance0">1</ix:nonFraction>
</span>
</td>
<td>
<span class="sum">
<ix:nonFraction contextRef="balance1">2</ix:nonFraction>
</span>
</td>
</tr>
<tr class="sep">
<td>Credit</td>
<td>
<span class="sum">
<ix:nonFraction contextRef="balance0">1</ix:nonFraction>
</span>
</td>
<td>
<span class="sum">
<ix:nonFraction contextRef="balance1">2</ix:nonFraction>
</span>
</td>
</tr>
</tbody>
</thead>
</table>
</body>
</html>