Php 将3D数组转换为HTML表
阵列Php 将3D数组转换为HTML表,php,html,Php,Html,阵列 $array['1'] = null; $array['2']['21'] = null; $array['3']['31'] = null; $array['3']['32'] = null; $array['4']['41'] = null; $array['4']['42']['421']
$array['1'] = null;
$array['2']['21'] = null;
$array['3']['31'] = null;
$array['3']['32'] = null;
$array['4']['41'] = null;
$array['4']['42']['421'] = null;
$array['4']['42']['422'] = null;
$array['5']['51'] = null;
$array['5']['52'] = null;
$array['5']['53']['531'] = null;
$array['5']['53']['532'] = null;
$array['5']['53']['533'] = null;
$array['6']['61']['611'] = null;
$array['6']['62'] = null;
$array['6']['63']['631'] = null;
$array['6']['63']['632'] = null;
$array['6']['63']['633'] = null;
$array['6']['63']['634'] = null;
$array['7']['71']['711'] = null;
$array['8']['81']['811'] = null;
$array['8']['81']['812'] = null;
$array['9']['91']['911'] = null;
$array['9']['91']['912'] = null;
$array['9']['92']['921'] = null;
$array['9']['92']['922'] = null;
我正在尝试将上面的数组转换为HTML表。我需要添加rowspan
,以获得如下图所示的输出,但已耗尽
PHP
//If condition is satistied
if (isset($array) && count($array) > 0)
{
//echo '<pre>'; print_r($array); exit;
//Initiate variables
$row = null;
$level_one_array = $array;
//Iterate through menu level one
foreach ($level_one_array as $level_one_name => $level_two_array)
{
//If level two is an array
if (is_array($level_two_array))
{
//Iterate through menu level two
foreach ($level_two_array as $level_two_name => $level_three_array)
{
//If level two is an array
if (is_array($level_three_array))
{
//Iterate through menu level three
foreach ($level_three_array as $level_three_name => $null)
{
$row .= '<tr>';
$row .= '<td class="td_data">' . $level_one_name . '</td>';
$row .= '<td class="td_data">' . $level_two_name . '</td>';
$row .= '<td class="td_data">' . $level_three_name . '</td>';
$row .= '</tr>';
}
}
//If level two is not an array
else
{
$row .= '<tr>';
$row .= '<td class="td_data">' . $level_one_name . '</td>';
$row .= '<td class="td_data">' . $level_two_name . '</td>';
$row .= '<td class="td_data"> </td>';
$row .= '</tr>';
}
}
}
//If level two is not an array
else
{
$row .= '<tr>';
$row .= '<td class="td_data">' . $level_one_name . '</td>';
$row .= '<td class="td_data"> </td>';
$row .= '<td class="td_data"> </td>';
$row .= '</tr>';
}
}
$table = '<table>';
$table .= '<tr><td class="td_title">Menus</td><td class="td_title">Submenus/Items</td><td class="td_title">Items</td></tr>';
$table .= $row;
$table .= '</table>';
echo $table;
}
else
{
echo '<center>No record found</center>';
}
//如果条件满足
如果(isset($array)和计数($array)>0)
{
//回显“”;打印($array);退出;
//启动变量
$row=null;
$level_one_数组=$array;
//遍历菜单级别1
foreach($level\u one\u数组作为$level\u one\u名称=>$level\u two\u数组)
{
//如果二级是数组
if(is_数组($level_two_数组))
{
//遍历第二级菜单
foreach($level\u two\u数组作为$level\u two\u名称=>$level\u two\u数组)
{
//如果二级是数组
if(is_数组($level_three_数组))
{
//遍历第三级菜单
foreach($level\u three\u数组作为$level\u three\u名称=>$null)
{
$row.='';
$row.=''.$level_one_name';
$row.=''.$level_2; u name'.';
$row.=''.$level_three_name.';
$row.='';
}
}
//如果二级不是数组
其他的
{
$row.='';
$row.=''.$level_one_name';
$row.=''.$level_2; u name'.';
$row.='';
$row.='';
}
}
}
//如果二级不是数组
其他的
{
$row.='';
$row.=''.$level_one_name';
$row.='';
$row.='';
$row.='';
}
}
$table='';
$table.=“菜单子菜单/项目站点”;
$table.=$row;
$table.='';
echo$表;
}
其他的
{
回显“未找到记录”;
}
我需要的是:
我编写了新代码,可以实现这一目的。使用
行span
非常棘手。关键元素是计算行span()
和$水平行上的标志
,以确定是否需要添加
必须将输出与最内部的foreach分离,因为必须使用它处理多行。此外,我还在每个
之后添加了“\n”
,以使输出更具可读性
函数计算行跨度($array)
{
如果(!is_array($array)| count($array)==0)
返回1;
$rowspan=0;
foreach($key=>$value的数组)
{
$rowspan++;
if(is_数组($value)&&count($value)>0)
{
$rowspan+=计数($value);
//-1,因为第一个元素是同一行
$rowspan--;
}
}
返回$rowspan;
}
if(is_数组($array)&&count($array)>0)
{
$output='';
foreach($level\u one\u name=>$level\u two\u数组形式的数组)
{
如果(!is_数组($level_two_数组)| count($level_two_数组)==0)
{
$output.='';
$output.=$level\u one\u name;
$output.=''。\n“;
}
其他的
{
$output.='';
$output.='';
$output.=$level\u one\u name;
$output.='';
$on_level_one_row=TRUE;
foreach($level\u two\u数组作为$level\u two\u名称=>$level\u two\u数组)
{
如果(!$在第一行上)
$output.='';
其他的
$on_level_one_row=FALSE;
如果(!is_数组($level_three_数组)| count($level_three_数组)==0)
{
$output.='';
$output.=$level\u two\u name;
$output.=''。\n“;
}
其他的
{
$output.='';
$output.=$level\u two\u name;
$output.='';
$on_level_two_row=TRUE;
foreach($level\u three\u数组作为$level\u three\u名称=>$null)
{
如果(!$在第二层第二排)
$output.='';
其他的
$on_level_two_row=FALSE;
$output.='';
$output.=$level\u三个\u名称;
$output.=''。\n“;
}
}
}
}
}
打印“”。“\n”;
打印$输出;
打印“”;
}
您只需要第三个foreach
inside@kingkero-如果是那么简单,我会这么做!!!您在尝试这样做时遇到了什么具体问题?第一列和第二列(维度)的行跨度会产生问题。好的。我必须管理我不太明白你的意图,你能更具体地说明一下你想要表格的显示方式吗?第一列中的第1级,第二列中的第2级,等等?我们如何添加rowspan
?好了。仔细看一看代码和输出,如果有任何问题,请随意询问,这正是我想要的。谢谢你的时间和脑力。
function calculate_rowspan($array)
{
if (!is_array($array) || count($array) == 0)
return 1;
$rowspan = 0;
foreach ($array as $key=>$value)
{
$rowspan++;
if (is_array($value) && count($value) > 0)
{
$rowspan += count($value);
// -1 because first element is one same row
$rowspan--;
}
}
return $rowspan;
}
if (is_array($array) && count($array) > 0)
{
$output = '';
foreach ($array as $level_one_name => $level_two_array)
{
if (!is_array($level_two_array) || count($level_two_array) == 0)
{
$output .= '<tr><td>';
$output .= $level_one_name;
$output .= '</td><td></td><td></td></tr>'."\n";
}
else
{
$output .= '<tr>';
$output .= '<td rowspan="'.calculate_rowspan($level_two_array).'">';
$output .= $level_one_name;
$output .= '</td>';
$on_level_one_row = TRUE;
foreach ($level_two_array as $level_two_name => $level_three_array)
{
if ( ! $on_level_one_row)
$output .= '<tr>';
else
$on_level_one_row = FALSE;
if (!is_array($level_three_array) || count($level_three_array) == 0)
{
$output .= '<td>';
$output .= $level_two_name;
$output .= '</td><td></td></tr>'."\n";
}
else
{
$output .= '<td rowspan="'.calculate_rowspan($level_three_array).'">';
$output .= $level_two_name;
$output .= '</td>';
$on_level_two_row = TRUE;
foreach ($level_three_array as $level_three_name => $null)
{
if ( ! $on_level_two_row)
$output .= '<tr>';
else
$on_level_two_row = FALSE;
$output .= '<td>';
$output .= $level_three_name;
$output .= '</td></tr>'."\n";
}
}
}
}
}
print '<table>'."\n";
print $output;
print '</table>';
}