从多维数组动态显示表

时间:2016-09-03 11:42:55

标签: php arrays

所有主人。  我有一个下面的数组

Array
(
    [1] => Array
        (
            [2] => Array
                (
                    [0] => 11
                    [1] => 12
                    [2] => 13
                )

            [3] => Array
                (
                    [0] => 21
                )

        )

    [2] => Array
        (
            [2] => Array
                (
                    [0] => 11
                    [1] => 12
                    [2] => 13
                )

            [3] => Array
                (
                    [0] => 21
                )

        )

    [3] => Array
        (
            [2] => Array
                (
                    [0] => 11
                    [1] => 12
                    [2] => 13
                )

            [3] => Array
                (
                    [0] => 21
                )

        )

)

在上面的数组中第一个节点[1]是我的颜色值。里面它[2]是我的尺寸属性和这个值。在同一个子节点中,它们的[3]是我的类型属性及其值。我想以这样的HTML表格格式显示它。 1 2 3应根据下表进行显示。

<table>
  <tr>
    <th>1</th>
    <th>2</th>
    <th>3</th>
  </tr>
  <tr>
    <td>1</td>
    <td>11</td>
    <td>21</td>
  </tr>
  <tr>
    <td>1</td>
    <td>12</td>
    <td>21</td>
  </tr>
  <tr>
    <td>1</td>
    <td>13</td>
    <td>21</td>
  </tr>
  <tr>
    <td>2</td>
    <td>11</td>
    <td>21</td>
  </tr>
  <tr>
    <td>2</td>
    <td>12</td>
    <td>21</td>
  </tr>
  <tr>
    <td>2</td>
    <td>13</td>
    <td>21</td>
  </tr>
  
 </table> 

如果他们没有3节点表将显示如下

    <table>
      <tr>
        <th>1</th>
        <th>2</th>
     </tr>
      <tr>
        <td>1</td>
        <td>11</td>
      </tr>
      <tr>
        <td>1</td>
        <td>12</td>
       </tr>
      <tr>
        <td>1</td>
        <td>13</td>
      </tr>
      <tr>
        <td>2</td>
        <td>11</td>
      </tr>
      <tr>
        <td>2</td>
        <td>12</td>
       </tr>
      <tr>
        <td>2</td>
        <td>13</td>
      </tr>
      
     </table> 

请帮助我实现这一目标。

1 个答案:

答案 0 :(得分:0)

使用rangearray_mapendcurrent函数的解决方案:

// $arr is your initial array
$parent_keys = range(1, count(current($arr)) + 1);
echo "<table><tr>" . 
        implode("", array_map(function($v){
            return "<th>".$v."</th>"; }, $parent_keys)
        );
echo "</tr>";

foreach ($arr as $k => $item) {
    if (count($item) > 1 && is_array(end($item))) $last = current(end($item));
    reset($item);
    foreach (current($item) as $v) {
        echo "<tr><td>$k</td><td>$v</td>". (isset($last)? "<td>$last</td>" : "") ."</tr>";
    }
}

echo "</table>";

DEMO link

tr中的每个单元格序列都包含当前数组项的“key”(父级别的数组键) + 值(您称之为 Node [2] ] )来自节点[3] + 值(,如果存在)。
<th>的数量单元格取决于每个嵌套项目(节点[2],节点[3])有多少元素...包括来自父级级别的键