我有一个数据数组如下
$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
如果有人可以帮我解决它。感谢
答案 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> </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;
}