PHP多维数组转换成html表

时间:2011-03-24 05:44:06

标签: php datatable multidimensional-array html-table

我有一个数据数组如下

   $array = array(
       'xcol'=>array('no','head','head1','head2'=>array(
          'o1','o2'
       ),'head3'), // => convert into th
       'ycol'=>array(                                      // => convert into td
          '1'=>array(
              'name1'=>array('data1',array('a','1'),'data3')
          ),
          '2'=>array(
              'name2'=>array('data1',array('b','2'),'data3')
          ),
          '3'=>array(
              'name3'=>array('data1',array('c','3'),'data3')
          ),
          '4'=>array(
              'name4'=>array('data1',array('d','4'),'data3')
          ),
          '5'=>array(
              'name5'=>array('data1',array('e','5'),'data3')
          )
       )
    );

我想把它变成html表,如下所示。

**no** | **head**  | head1 |  head2  | head3
       |           |       | o1 | o2 |
--------------------------------------------
**1**  | **name1** | data1 | a  | 1  | data3
**2**  | **name2** | data1 | b  | 2  | data3
**3**  | **name3** | data1 | c  | 3  | data3
**4**  | **name4** | data1 | d  | 4  | data3
**5**  | **name5** | data1 | e  | 5  | data3

如果有人可以帮我解决它。感谢

1 个答案:

答案 0 :(得分:1)

到目前为止,这是我能想到的。您可以通过组合函数进一步简化它,并使用递归函数迭代所有数组元素。希望这会有所帮助。

// Separate the xcol & ycol 
$array_x = $array['xcol'];
$array_y = $array['ycol'];

create_table(array_x($array_x),array_y($array_y));

function array_x($input = array()){
    $str = '<tr>';
    if (is_array($input)){
        $str2 .= "<tr>";
        foreach ($input as $key=>$value){
            if (is_array($value)){
                $str .= "<th colspan='2'>".$key."</th>";
                foreach ($value as $k=>$v){
                    $str2 .= "<th>".$v."</th>"; 
                }
            }else{
                $str .= "<th>".$value."</th>";
                $str2 .= "<th>&nbsp;</th>";
            }
        }
    }
    $str2 .= '</tr>'."\n";
    $str .= '</tr>'."\n".$str2;
    return $str;
}

function array_y($input = array()){
    $str = "";
    if (is_array($input)){
        foreach ($input as $key=>$value){
            if (is_array($value)){
                $str .= "<tr><td>".$key."</td>";
                foreach ($value as $k=>$v){
                    if (is_array($v)){
                        $str .= "<td>".$k."</td>";
                        foreach ($v as $k1=>$v1){
                            if (is_array($v1)){
                                foreach ($v1 as $k2=>$v2){
                                    $str .= "<td>".$v2."</td>"; 
                                }
                            }else{
                                $str .= "<td>".$v1."</td>"; 
                            }
                        }
                    }else{
                        $str .= "<td>".$v."</td>"; 
                    }
                }
            }else{
                $str .= "<td>".$value."</td>";
            }
        }
    }
    $str .= '</tr>'."\n";
    return $str;
}

function create_table($str_x,$str_y){
    $str = '<table border="1">'."\n";
    $str .=  $str_x.$str_y;
    $str .= '</table>'."\n";
    echo $str;
}