php - PHP MYSQL:打印二维数组
问题描述
我的数组之一中有以下数据:
array (size=3)
0 =>
array (size=4)
'ID' => string '1747' (length=4)
'OWNER' => string 'ME' (length=7)
'TABLENAME' => string 'MYFIRSTTABLE' (length=15)
'COLUMNNAME' => string 'MYFIRSTFIELD' (length=11)
1 =>
array (size=4)
'ID' => string '1756' (length=4)
'OWNER' => string 'ME' (length=7)
'TABLENAME' => string 'MYFIRSTTABLE' (length=15)
'COLUMNNAME' => string 'MYSECONDFIELD' (length=12)
2 =>
array (size=4)
'ID' => string '1757' (length=4)
'OWNER' => string 'ME' (length=7)
'TABLENAME' => string 'ANOTHERTABLE' (length=15)
'COLUMNNAME' => string 'ANOTHERFIELD' (length=16)
到目前为止,一切正常:我可以遍历每一行并将它们打印到 HTML 表格中。像这样的东西:
现在,我想知道如何产生这样的东西:
我尝试了一些嵌套的 foreach,但没有任何成功。
在此先感谢您的帮助!
解决方案
我认为这样的事情应该做你想要的。它从数据中找到所有表名(使用array_unique
的输出array_column
),然后找到每个表的所有列名(使用array_filter
,然后array_values
重新索引数组的键)。然后它遍历表和列,输出一个表名及其列名的表:
$tables = array_unique(array_column($data, 'TABLENAME'));
$columns = array();
foreach ($tables as $tn) {
$columns[$tn] = array_values(array_filter($data, function ($v) use ($tn) {
return $v['TABLENAME'] == $tn;
}));
}
$max_columns = max(array_map(function ($v) { return count($v); }, $columns));
echo "<table>\n";
foreach ($tables as $tn) {
echo "<tr><td>$tn</td><td colspan=\"$max_columns\"></td></tr>\n";
echo "<tr><td></td>";
foreach ($columns[$tn] as $key => $column) {
echo "<td>{$column['COLUMNNAME']}</td>";
}
if ($key < $max_columns - 1) {
echo "<td colspan=\"" . ($max_columns - $key - 1) . "\"></td>";
}
echo "</tr>\n";
}
echo "</table>\n";
输出(用于您的样本数据)
<table>
<tr>
<td>MYFIRSTTABLE</td>
<td colspan="2"></td>
</tr>
<tr>
<td></td>
<td>MYFIRSTFIELD</td>
<td>MYSECONDFIELD</td>
</tr>
<tr>
<td>ANOTHERTABLE</td>
<td colspan="2"></td>
</tr>
<tr>
<td></td>
<td>ANOTHERFIELD</td>
<td colspan="1"></td>
</tr>
</table>
推荐阅读
- java - 如何计算递归函数中的组合?
- c#-4.0 - 如何在 C# 类中注入 Blazor 会话存储
- android - 我在哪里可以检测到使用 adb(Rooted Phone) 连接到 Android 手机的 USB 设备?
- windows - Deno 安装错误:“iwr:底层连接已关闭:发送时发生意外错误。”
- javascript - HTTP POST 请求在 Android 上特别失败
- ios - CoreData:如何将对象插入 CoreData 数据结构?
- java - 如何在另一个特定字符之后匹配特定字符
- python - 错误:(-2:未指定的错误)无法在函数 'cv::dnn::dnn4_v20210608::LayerData::getLayerInstance' 中创建类型为“NoOp”的层“NoOp”
- javascript - 我可以 JSDocument 东西的使用情况,而不是创建
- python - 所有目录中的 Python 测试?