Improve print of nested tables

This commit is contained in:
Jakub Vrana
2026-01-31 23:28:54 +01:00
parent 58ff31a15d
commit e6fe48516e
2 changed files with 23 additions and 6 deletions

View File

@@ -2,6 +2,7 @@
- Pretty print JSON in edit
- Support multiline generated values in alter table
- Link //domain.tld values
- Improve print of nested tables
- PostgreSQL: Offer foreign keys in create table
- PostgreSQL: Add missing parentheses to CHECK export
- PostgreSQL: Allow creating NOT DEFERRABLE foreign keys

View File

@@ -765,7 +765,7 @@ function rand_string(): string {
}
/** Format value to use in select
* @param string|string[] $val
* @param string|string[]|list<string[]> $val
* @param Field $field
* @param ?numeric-string $text_length
* @return string HTML
@@ -773,11 +773,27 @@ function rand_string(): string {
function select_value($val, string $link, array $field, ?string $text_length): string {
if (is_array($val)) {
$return = "";
foreach ($val as $k => $v) {
$return .= "<tr>"
. ($val != array_values($val) ? "<th>" . h($k) : "")
. "<td>" . select_value($v, $link, $field, $text_length)
;
if (array_filter($val, 'is_array') == array_values($val)) { // list of arrays
$keys = array();
foreach ($val as $v) {
$keys += array_fill_keys(array_keys($v), null);
}
foreach (array_keys($keys) as $k) {
$return .= "<th>" . h($k);
}
foreach ($val as $v) {
$return .= "<tr>";
foreach (array_merge($keys, $v) as $v2) {
$return .= "<td>" . select_value($v2, $link, $field, $text_length);
}
}
} else {
foreach ($val as $k => $v) {
$return .= "<tr>"
. ($val != array_values($val) ? "<th>" . h($k) : "")
. "<td>" . select_value($v, $link, $field, $text_length)
;
}
}
return "<table>$return</table>";
}