【问题标题】:PHP two dimensional array into HTMLPHP二维数组转换成HTML
【发布时间】:2012-05-21 05:31:12
【问题描述】:

一个简单的 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>

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

【问题讨论】:

    标签: php html loops html-table


    【解决方案1】:

    下面的代码将遍历数组的两个维度并将它们组成一个表格。无论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 "&lt;table&gt;"; 行之后添加此代码:

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

    导致:

    【讨论】:

    • 感谢@thisMayhem,您的回答是正确的。我已经简化了它,因为我看不到关键点。我会把它放在下面。
    • 我刚刚添加了它,以防你需要它,就像我说的那样。我很高兴我的回答很有帮助:) 请考虑投票并将其标记为有效答案,@Brett
    • 谢谢@thisMayhem。有人告诉我,我有七个小时无法回答我自己的问题,所以你必须等待。
    • 我认为您的标题行是横向的。您在这里无法分辨,因为您使用了诊断对称数据。如果您要使用输入 1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16,那么标题将不会在此处正确对齐。
    • 杰克 M,我不明白你的意思。用你的数据试过,标题对齐得很好
    【解决方案2】:

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

    //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  |
    +-----+-----+-----+
    

    【讨论】:

    • 我的意思是if($first),谢谢。至于 $foo,它只是一个示例数组。我假设他已经有正确格式化的输入,我只是把它放在那里作为一个例子,它需要是矩形输入才能使标题行正常工作。至于在 php 标签之外进行回显与渲染,为了简单起见,我在这里使用了回显。如果我使用它,我会将它包装在一个函数中,将所有 html 放入一个输出变量而不是回显,然后将其返回以供稍后回显。
    • 我给了你+1,杰克。你为此付出了努力。人怎么了?
    【解决方案3】:

    你的循环会是这样的:

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

    在 $k 中你将 kave 键,在 $v 中值...然后你可以打印两者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2010-10-13
      • 2015-11-27
      相关资源
      最近更新 更多