diff --git a/CHANGELOG.md b/CHANGELOG.md index c659362c..b8024657 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index 2f091594..67040b1c 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -765,7 +765,7 @@ function rand_string(): string { } /** Format value to use in select -* @param string|string[] $val +* @param string|string[]|list $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 .= "" - . ($val != array_values($val) ? "" . h($k) : "") - . "" . 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 .= "" . h($k); + } + foreach ($val as $v) { + $return .= ""; + foreach (array_merge($keys, $v) as $v2) { + $return .= "" . select_value($v2, $link, $field, $text_length); + } + } + } else { + foreach ($val as $k => $v) { + $return .= "" + . ($val != array_values($val) ? "" . h($k) : "") + . "" . select_value($v, $link, $field, $text_length) + ; + } } return "$return
"; }