Как сделать код на С# только на PHP
[code=html
public string GetHTML()
{
string html, row1 = "", row2 = "";
html = "<table border=1 itemprop=\"graduatejob\"><thead>";
List<string> Years = new List<string> {};
List<string> Collumns = new List<string> {};
// Копируем столбец God1
foreach (graduateJob self in this.graduateJobBindingList)
{
Years.Add(self.God1);
}
// Сортируем по возрастанию
Years.Sort();
// Определяем максимальный год в исходном массиве данных
int lastYearValue = Convert.ToInt32(Years.Max());
// Формирем массив колонок, соответствующих году,
// отбирая уникальные позици, и фильтруя список по последним трем годам
Collumns.AddRange(Years.Distinct().Where(p => p.CompareTo(Convert.ToString(lastYearValue - 3)) == 1));
// Заполняем шапку таблицы
foreach (string columnYear in Collumns) {
row1 += "<td colspan=2>Год " + columnYear + "</td>";
row2 += "<td>Кол-во выпускников</td><td>Кол-во трудоустроенных выпускников</td>";
}
html += "<tr><td rowspan=2>Код</td><td rowspan=2>Направление подготовки (специальности)</td>" + row1 + "</tr><tr>" + row2 + "</tr></thead><tbody>";
// формируем новый список на основании имеющегося
IEnumerable<graduateJob> sortedRepo = this.graduateJobBindingList
.Where(z => z.God1.CompareTo(Convert.ToString(lastYearValue - 3)) == 1) // фильтруем по последним трем годам
.OrderBy(s => s.God1) // сортируем по году
.OrderBy(p => p.EduName); // затем по наименованию специиальности
int nextColumn = 0, delta, currentCollumn, i;
string previousName = sortedRepo.First().EduName;
html += "<tr><td>" + sortedRepo.First().EduCode + "</td><td>" + sortedRepo.First().EduName + "</td>";
// заливаем тело таблицы
foreach (graduateJob self in sortedRepo)
{
// Для новой специальности отбиваем новую строку
if (previousName != self.EduName) { // проеверяем не закончилась ли инфа по текущей специальности
html += "</tr><tr><td>" + self.EduCode + "</td><td>" + self.EduName + "</td>"; // если да, отбиваем новую строку и вносим инфу по следующей
nextColumn = 0; // переводим курсор колонки на первую позицию
}
previousName = self.EduName; // фиксируем текущую специальность
currentCollumn = Collumns.FindIndex(p => p == self.God1); // Ищем позицию колонки для текущей строки по году
delta = currentCollumn - nextColumn; // проверяем, соответствует ли год текущей строки году текущей колонки
nextColumn++; // смещаем курсор на следующую колонку
// Заполняем пустоты
for (i = 0; i < delta; i++)
{
html += "<td>-</td><td>-</td>";
}
html += "<td>" + self.KollTrudvipsk1 + "</td><td>" + self.Kollvipsk1 + "</td>"; // Забиваем данные на пересечении года и специальности
}
html = html.Substring(0, html.Length - 5); // отсекаем последний <tr>
html += "</tbody>";
html += "</table>";
return html;
}
php][/code]
PHP:
скопировать код в буфер обмена
<!DOCTYPE html>
<?PHP /*подключаем xml файл*/
?>
<html>
<head>
<meta charset="UTF-8">
<title>Таблица(Шаблон представления информации о трудоустройстве выпускников образовательных организаций за последние 3 года)</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
</head>
<body>
<div class="container-fluid">
<h1>Таблица(Шаблон представления информации о трудоустройстве выпускников образовательных организаций за последние 3 года)</h1>
<table itemprop="eduOP" class="table table-bordered table-hover table-striped">
<thead>
<tr>
<td rowspan=2>Код</td>
<td rowspan=2>Направление подготовки (специальности)</td>
<?PHP
$obj = $xml->graduateJobBindingList->graduateJob;
echo "\t\t\t\t\t\t".'<td colspan=2> Год '.$obj->God.'</td>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td colspan=2> Год '.$obj->God2.'</td>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td colspan=2> Год '.$obj->God3.'</td>'.PHP_EOL;
?>
</tr>
<tr>
<td>Кол-во выпускников</td>
<td>Кол-во трудоустроенных выпускников</td>
<td>Кол-во выпускников</td>
<td>Кол-во трудоустроенных выпускников</td>
<td>Кол-во выпускников</td>
<td>Кол-во трудоустроенных выпускников</td>
</tr>
</thead>
<tbody>
<?PHP
foreach($xml->graduateJobBindingList->graduateJob as $curNode)
{
echo "\t\t\t\t\t".'<tr>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td itemprop="eduCode" class="text-center">'.$curNode->EduCode."</td>".PHP_EOL;
echo "\t\t\t\t\t\t".'<td itemprop="eduName">'.$curNode->EduName.'</td>'.PHP_EOL;
// echo "\t\t\t\t\t\t".'<td itemprop="god1">'.$curNode->God1.'</td>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td itemprop="kollvipsk1">'.$curNode->Kollvipusknikov.'</td>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td itemprop="kollTrudvipsk1">'.$curNode->Kolltrudoustroinihvipsknikov.'</td>'.PHP_EOL;
//echo "\t\t\t\t\t\t".'<td itemprop="god2">'.$curNode->God2.'</td>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td itemprop="kollvipsk2">'.$curNode->Kollvipusknikov2.'</td>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td itemprop="kollTrudvipsk2">'.$curNode->Kolltrudoustroinihvipsknikov2.'</td>'.PHP_EOL;
// echo "\t\t\t\t\t\t".'<td itemprop="god1">'.$curNode->God3.'</td>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td itemprop="kollvipsk1">'.$curNode->Kollvipusknikov3.'</td>'.PHP_EOL;
echo "\t\t\t\t\t\t".'<td itemprop="kollTrudvipsk1">'.$curNode->Kolltrudoustroinihvipsknikov.'</td>'.PHP_EOL;
echo "\t\t\t\t\t".'</tr>'.PHP_EOL;
}
?>
</tbody>
</table>
</div>
</body>
</html>