Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将3D数组转换为HTML表_Php_Html - Fatal编程技术网

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">&nbsp;</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">&nbsp;</td>';
            $row .= '<td class="td_data">&nbsp;</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>';
}