6

一个简单的 Google 搜索将揭示大量使用 PHP 将二维数组转换为 HTML 的解决方案。不幸的是,这些都没有我正在寻找的答案。

我想要一段将数组转换为 HTML 表格的通用代码。大多数示例出错的地方是他们假设程序员知道表字段的名称。我希望这段代码是通用的,这样即使我不知道字段的名称也可以使用它。

我可以看到我需要两个循环。一个嵌套在另一个内部。我不确定的是如何获取值,因为我不知道键。

最终结果将有望输出类似这样的 html:

<th>
  <td>x/y</td>
  <td> x1 </td>
  <td> x2 </td>
</th>
<tr>
  <td>y1</td>
  <td> x1y1 </td>
  <td> x2y1 </td>
</tr>
<tr>
  <td>y2</td>
  <td> x1y2 </td>
  <td> x2y2 </td>
</tr>

请记住,我想要一个通用且简单的解决方案。我希望这很清楚。

4

3 回答 3

13

以下代码将查看数组的两个维度并将它们制成表格。不管它是什么key,你都会得到它的视觉表示。如果它们确实有键名而不仅仅是索引,则这些值将分别在$key和中可用$subkey。因此,如果您需要它们,您将拥有它们。

编码:

$myarray = array("key1"=>array(1,2,3,4),
                 "key2"=>array(2,3,4,5),
                 "key3"=>array(3,4,5,6),
                 "key4"=>array(4,5,6,7)); //Having a key or not doesn't break it
$out  = "";
$out .= "<table>";
foreach($myarray as $key => $element){
    $out .= "<tr>";
    foreach($element as $subkey => $subelement){
        $out .= "<td>$subelement</td>";
    }
    $out .= "</tr>";
}
$out .= "</table>";

echo $out;

结果:

在此处输入图像描述

如果您想将键视为标题,可以echo "<table>";在行后添加以下代码:

echo "<tr>";
foreach($myarray as $key => $element) echo "<td>$key</td>";
echo "</tr>";

结果是:

在此处输入图像描述

于 2012-05-13T11:34:10.183 回答
3

你需要两个循环。一个循环通过第一级,另一个循环通过第二级。这假设您的二维数组是规则的矩形。

//our example array
$foo['one']['a'] = '1a';
$foo['one']['b'] = '1b';
$foo['two']['a'] = '2a';
$foo['two']['b'] = '1b';

//open table
echo '<table>';

//our control variable
$first = true;

foreach($foo as $key1 => $val1) {
    //if first time through, we need a header row
    if($first){
        echo '<tr><th></th>';
        foreach($val1 as $key2 => $value2){
            echo '<th>'.$key2.'</th>';
        }
        echo '</tr>';

        //set control to false
        $first = false;
    }

    //echo out each object in the table
    echo '<tr><td>'.$key1.'</td>';
    foreach($val1 as $key2 => $value2){
        echo '<td>'.$value2.'</td>';
    }
    echo '</tr>';
}

echo '</table>';

还没有测试过,但这应该适合你。数组的第一级是行,数组的第二级是列。

我们的 $foo 数组的示例输出:

+-----+-----+-----+
|     |  a  |  b  |
+-----+-----+-----+
| one | 1a  | 1b  |
+-----+-----+-----+
| two | 2a  | 2b  |
+-----+-----+-----+
于 2012-05-13T11:51:57.743 回答
-1

您的循环将是这样的:

foreach($myArray as $k => $v)

在 $k 中,您将保存密钥,在 $v 中保存值...然后您可以打印两者。

于 2012-05-13T11:32:05.270 回答