Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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 合并单元的改进算法_Php_Arrays_Algorithm - Fatal编程技术网

Php 合并单元的改进算法

Php 合并单元的改进算法,php,arrays,algorithm,Php,Arrays,Algorithm,我有以下用于html表的合并单元格的算法,我想知道是否有其他方法来改进代码并使其更快,或者有其他方法来重写此代码 $matrix=array("person1"=>array("wifes"=>array("diana"=>array("born"=>1982,"last_name"=>"chapelle"),"carla"=>array("born"=>1983,"last_name"=>"michael"),"serena"=>array

我有以下用于html表的合并单元格的算法,我想知道是否有其他方法来改进代码并使其更快,或者有其他方法来重写此代码

$matrix=array("person1"=>array("wifes"=>array("diana"=>array("born"=>1982,"last_name"=>"chapelle"),"carla"=>array("born"=>1983,"last_name"=>"michael"),"serena"=>array("born"=>1984,"last_name"=>"mickelson")
            ,"king"=>array("born"=>1980,"last_name"=>"jordan")))
    ,"person2"=>array("husbands"=>array("charles"=>array("born"=>1983,"last_name"=>"rambo")
    ,"minglen"=>array("born"=>1973,"last_name"=>"rian"),"serrano"=>array("born"=>1914,"last_name"=>"kingside"))));

$htmlx="<table border='1'>";
    $htmlx.="<tr>";
    $htmlx.="<th>object</th><th>type</th><th>names</th><th>detail_names</th><th>values_detail</th>";
    $html_p=NULL; $p=0; 
    foreach ($matrix as $pkey => $pvalue) {
        $t=0;   $html_t=NULL;
        foreach ($pvalue as $tkey => $tvalue) {
            $n=0;   $html_n=NULL;   $rs_general=0;
            foreach ($tvalue as $nkey => $nvalue) {
                $d=0;   $html_d=NULL;   $rs_general+=count($nvalue);
                foreach ($nvalue as $dkey => $dvalue) {

                    $d++;
                    if($d==1){
                        $html_d="<td>".$dkey."</td><td>".$dvalue."</td>";
                    }else{
                        $html_d.="<tr><td>".$dkey."</td><td>".$dvalue."</td></tr>";
                    }
                }
                $n++;
                if($n==1){
                    $html_n.="<td rowspan='".count($nvalue)."'>".$nkey."</td>".$html_d;
                }else{
                    $html_n.="<tr><td rowspan='".count($nvalue)."'>".$nkey."</td>".$html_d."</tr>";
                }
            }
            $t++;
            if($t==1){
                $html_t="<td  rowspan='".$rs_general."'>".$tkey."</td>".$html_n;
            }else{
                $html_t.="<tr><td  rowspan='".$rs_general."'>".$tkey."</td>".$html_n."</tr>";
            }
        }
        $p++;
        if($p==1){
            $html_p.="<td rowspan='".$rs_general."'>".$pkey."</td>".$html_t;
        }else{
            $html_p.="<tr><td rowspan='".$rs_general."'>".$pkey."</td>".$html_t."</tr>";
        }

    }
    $htmlx.="</tr>".$html_p;
$htmlx.="</table>";
echo $htmlx;
$matrix=array(“person1”=>array(“wifes”=>array(“diana”=>array(“born”=>1982,“last\u name”=>“chapelle”),“carla”=>array(“born”=>1983,“last\u name”=>“michael”),“serena”=>array(“born”=>1984,“last\u name”=>“mickelson”)
,“king”=>数组(“born”=>1980,“姓氏”=>“jordan”))
,“person2”=>数组(“丈夫”=>数组(“查尔斯”=>数组(“出生”=>1983,“姓氏”=>兰博”)
,“minglen”=>数组(“born”=>1973,“姓氏”=>rian”),“serrano”=>数组(“born”=>1914,“姓氏”=>kingside”);
$htmlx=“”;
$htmlx.=”;
$htmlx.=“objecttypenamesdetail\u namesvalues\u detail”;
$html_p=NULL$p=0;
foreach($pkey=>$pvalue的矩阵){
$t=0;$html\u t=NULL;
foreach($tvalue为$tkey=>$tvalue){
$n=0;$html\u n=NULL;$rs\u general=0;
foreach($tvalue为$nkey=>$nvalue){
$d=0;$html\u d=NULL;$rs\u general+=count($nvalue);
foreach($dkey=>$dvalue的nvalue){
$d++;
如果($d==1){
$html_d=“”.$dkey.“$dvalue.”;
}否则{
$html_d.=“..$dkey.”“$dvalue.”;
}
}
$n++;
如果($n==1){
$html\u n.=“.nkey.”$html\u d;
}否则{
$html\u n.=“.nkey.”“$html\u d.”;
}
}
$t++;
如果($t==1){
$html\u t=“”.$tkey.“$html\n;
}否则{
$html\u t.=”.$tkey.“$html\u n.”;
}
}
$p++;
如果($p==1){
$html\u p.=“.$pkey.”$html\u t;
}否则{
$html\u p.=“.$pkey.”“$html\u t.”;
}
}
$htmlx.=''.$html\U p;
$htmlx.=”;
echo$htmlx;

结果给了我3列合并,我想知道是否有人有一个简单的例子,关于如何在html表上创建合并单元格,但使用维度数组?似乎唯一的方法就是循环使用
foreach

我发现这个问题很有趣,所以我想出了一个不同的方法。我用的是从。它没有经过优化,也许有更好的方法不用调用
countChildren

因此,它比您的解决方案更慢,但更灵活,可读性更强

function countChildren($array)
{
    $iterator = new RecursiveIteratorIterator(
        new RecursiveArrayIterator($array),
        RecursiveIteratorIterator::CHILD_FIRST
    );
    $count = 0;
    foreach ($iterator as $key => $value) {
        if (!is_array($value)) {
            $count++;
        }
    }
    return $count;
}

function getTable($array, $headerRow = '')
{
    $iterator = new RecursiveIteratorIterator(
        new RecursiveArrayIterator($array),
        RecursiveIteratorIterator::SELF_FIRST
    );
    $out = '<table border="1">'.$headerRow;
    $lastDepth = 0;

    foreach ($iterator as $key => $value) {
        $depth = $iterator->getDepth();
        if (!is_array($value)) {
            if ($lastDepth >= $depth) {
                $out .= '<tr>';
            }
            $out .= '<td>'.$key.'</td><td>'.$value.'</td></tr>';
        }
        else {
            if ($depth == 0) {
                $out .= '<tr>';
            }
            $out .= '<td rowspan="'.countChildren($value).'">'.$key.'</td>';
        }
        $lastDepth = $depth;
    }
    return $out;
}

echo getTable(
    $matrix,
    '<th>object</th>
    <th>type</th>
    <th>names</th>
    <th>detail_names</th>
    <th>values_detail</th>'
);
函数countChildren($array)
{
$iterator=新的递归迭代器(
新的递归ArrayIterator($array),
递归迭代器::CHILD_FIRST
);
$count=0;
foreach($key=>$value的迭代器){
如果(!是_数组($value)){
$count++;
}
}
返回$count;
}
函数getTable($array,$headerRow='')
{
$iterator=新的递归迭代器(
新的递归ArrayIterator($array),
递归迭代器::SELF_优先
);
$out=''.$headerRow;
$lastDepth=0;
foreach($key=>$value的迭代器){
$depth=$iterator->getDepth();
如果(!是_数组($value)){
如果($lastDepth>=$depth){
$out.='';
}
$out.='.$key.'.$value.'';
}
否则{
如果($depth==0){
$out.='';
}
$out.=''.$key.'';
}
$lastDepth=$depth;
}
退回$out;
}
回声可获取(
$matrix,
“反对
类型
名字
详细说明您的姓名
价值观"细节"
);

谢谢您的回答,先生。但是我期待优化算法,但是使用你提到的类是一个缓慢的过程。