Php 合并单元的改进算法
我有以下用于html表的合并单元格的算法,我想知道是否有其他方法来改进代码并使其更快,或者有其他方法来重写此代码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
$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,
“反对
类型
名字
详细说明您的姓名
价值观"细节"
);
谢谢您的回答,先生。但是我期待优化算法,但是使用你提到的类是一个缓慢的过程。