edit: Теперь, когда я лучше понимаю ваши входные данные, я протестировал этот скрипт.
Сначала я читаю файл данных, как вы, но я собираю поле данных по полю непосредственно в двумерный массив:
<?php
$data = array();
$InputFile = file("test.txt");
foreach ($InputFile as $line)
{
preg_match_all("/([0-9])-([^=]+)=([^;]+);/", $line, $matches, PREG_SET_ORDER);
foreach ($matches as $information)
{
$id = $information[1];
$field = $information[2];
$value = $information[3];
$data[$id][$field] = $value;
}
}
Далее я сортирую массив данных с пользователемопределенная функция сортировки передана в usort()
.Спасибо комментаторам за предложения по улучшению этой функции.
function comparebydatetime($a, $b) {
$adate = strtotime($a["Date"]." ".$a["Time"]);
$bdate = strtotime($b["Date"]." ".$b["Time"]);
return $adate-$bdate;
}
usort($data, "comparebydatetime");
Теперь данные сортируются по дате и времени, поэтому я могу просто вывести их:
$keys = array("Server", "Date","Set","Time","Duration","Size","Status");
echo "<table id='stats'>\n";
echo "<tr>\n";
foreach ($keys as $column)
{
echo "<th>" . htmlspecialchars($column) . "</th>\n";
}
echo "</tr>\n";
$counter=0;
foreach ($data as $row)
{
$counter ++;
$class = $counter % 2 === 0 ? "alt1" : "alt2";
echo "<tr class='" . htmlspecialchars($class) . "'>\n";
foreach ($keys as $column)
{
echo "<td>";
if (isset($row[$column]))
{
echo htmlspecialchars($row[$column]);
}
echo "</td>\n";
}
echo "</tr>\n";
}
echo "</table>";
Я также добавил некоторые другие изменения для улучшения стиля PHP:
- Будьте последовательны в отношении отступов.
- Используйте фигурные скобки даже для блока с одним оператором.
- Используйте
htmlspecialchars()
для вывода динамических данных (включая имена полей, классы CSS и т. Д.).