首页 > 解决方案 > 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,但没有任何成功。

在此先感谢您的帮助!

标签: phpmysqlarrays

解决方案


我认为这样的事情应该做你想要的。它从数据中找到所有表名(使用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>

3v4l.org 上的演示


推荐阅读