Я не вижу смысла совершать так много повторных вызовов array_key_first()
- на самом деле, просто используйте известные имена столбцов, чтобы определять порядок данных при генерации разметки. Последняя ячейка в каждой строке таблицы - uid
, поэтому просто добавьте ее в список имен столбцов.
Я переименовал многие из ваших переменных, чтобы вам было легче следовать вашему сценарию.
Я не знаю, насколько динамически c эта пользовательская функция станет. Я использую http_build_query()
в качестве передового опыта - чтобы вы всегда генерировали правильную строку запроса, но если будут только alphanumeri c ключи и значения, то это может быть возвращено к вашей первоначальной технике непосредственного внедрения в строку URL.
Нет необходимости генерировать массив для возврата к таблице html, когда вы все равно собираетесь ее взорвать. Другими словами, просто создайте строку, верните ее и отобразите ее.
Полная перезапись: ( Демо )
function getDataTableWithoutDatabase(array $dataRow, array $columnNames, string $tableName) {
$tableRow = '<tr>';
foreach ($columnNames as $columnName) {
$tableRow .= '<td class="v-align-middle">';
if ($dataRow[$columnName]) {
$tableRow .= "<p>{$dataRow[$columnName]}</p>";
}
$tableRow .= '</td>';
}
$tableRow .= '<td><a href="../' . $tableName . 'edit?' . http_build_query([$tableName => $dataRow['uid']]) .'">Bewerken</a></td>';
$tableRow .= '</tr>';
return $tableRow;
}
$resultSet = [
['Voornaam' => '', 'uid' => '7d1f4f8e906245f', 'Achternaam' => 'Les', 'Initialen' => ''],
['Voornaam' => 'Foo', 'uid' => 'fedcba098765432', 'Achternaam' => '', 'Initialen' => ''],
['Voornaam' => '', 'uid' => '1234567890abcde', 'Achternaam' => '', 'Initialen' => 'Bar'],
];
$fieldList = [['name' => 'Voornaam'], ['name' => 'Achternaam'], ['name' => 'Initialen']];
$list = array_column($fieldList, 'name');
?>
<div class="card-body">
<table class="table table-hover demo-table-dynamic table-responsive-block" id="tableWithDynamicRows">
<thead>
<tr>
<?php echo '<th>' . implode('</th><th>', $list) . '</th>'; ?>
<th>Actie</th>
</tr>
</thead>
<tbody>
<?php
foreach ($resultSet as $row) {
echo getDataTableWithoutDatabase($row, $list, 'datalist');
}
?>
</tbody>
</table>
</div>
Вывод (после повторной привязки разметки) :
<div class="card-body">
<table class="table table-hover demo-table-dynamic table-responsive-block" id="tableWithDynamicRows">
<thead>
<tr>
<th>Voornaam</th>
<th>Achternaam</th>
<th>Initialen</th>
<th>Actie</th>
</tr>
</thead>
<tbody>
<tr>
<td class="v-align-middle"></td>
<td class="v-align-middle"><p>Les</p></td>
<td class="v-align-middle"></td>
<td><a href="../datalistedit?datalist=7d1f4f8e906245f">Bewerken</a></td>
</tr>
<tr>
<td class="v-align-middle"><p>Foo</p></td>
<td class="v-align-middle"></td>
<td class="v-align-middle"></td>
<td><a href="../datalistedit?datalist=fedcba098765432">Bewerken</a></td>
</tr>
<tr>
<td class="v-align-middle"></td>
<td class="v-align-middle"></td>
<td class="v-align-middle"><p>Bar</p></td>
<td><a href="../datalistedit?datalist=1234567890abcde">Bewerken</a></td>
</tr>
</tbody>
</table>
</div>