Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Multidimensional Array - Fatal编程技术网

Php 从具有行跨度的数组/多维数组生成动态表

Php 从具有行跨度的数组/多维数组生成动态表,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,嗨,伙计们!我想使用数组或多维数组中的数据创建一个带有tr的表 我的阵列是动态的,它可以看起来像: { "FIRST TD IN FIRST TR -> tr rowspan=1": [ { "name -> second td in first tr": "x", "title -> third td in first tr": "y", "email -> fourth t

嗨,伙计们!我想使用数组或多维数组中的数据创建一个带有tr的表

我的阵列是动态的,它可以看起来像:

{
    "FIRST TD IN FIRST TR -> tr rowspan=1": [
        {
            "name -> second td in first tr": "x",
            "title -> third td in first tr": "y",
            "email -> fourth td in first tr": "z",
            "phone -> fifth td in first tr": "0"
        }
    ],
    "FIRST TD IN SECOND TR -> tr rowspan=1": [
        {
            "name -> second td in second tr": "x",
            "title -> third td in second tr": "y",
            "email -> fourth td in second tr": "z",
            "phone -> fifth td in second tr": "0"
        }
    ],
    "FIRST TD IN THIRD TR -> tr rowspan=2": [
        {
            "name -> second td in third tr": "x",
            "title -> third td in third tr": "y",
            "email -> fourth td in third tr": "z",
            "phone -> fifth td in third tr": "0"
        },
        {
            "name -> second td in fourth tr": "x",
            "title -> third td in fourth tr": "y",
            "email -> fourth td in fourth tr": "z",
            "phone -> fifth td in fourth tr": "0"
        }
    ]
}
另一个可能是这样的:

{
    "FIRST TD IN FIRST TR -> rowspan 2": {
        "SECOND TD IN FIRST TR -> rowspan 1": [
            {
                "name -> third td in first tr": "x",
                "title -> fourth td in first tr": "y",
                "email -> fifth td in first tr": "z",
                "phone -> sixth td in first tr": "0"
            }
        ],
        "FIRST TD IN SECOND TR -> indented because of parent tr rowspan": [
            {
                "name -> second td in second tr": "x",
                "title -> third td in second tr": "y",
                "email -> fourth td in second tr": "z",
                "phone -> fifth td in second tr": "0"
            }
        ]
    },
    "FIRST TD IN THIRD TR -> rowspan 2": {
        "SECOND TD IN THIRD TR -> rowspan 1": [
            {
                "name -> third td in third tr": "x",
                "title -> fourth td in third tr": "y",
                "email -> fifth td in third tr": "z",
                "phone -> sixth td in third tr": "0"
            }
        ],
        "FIRST TD IN FOURTH TR -> indented because of parent tr rowspan": [
            {
                "name -> second td in fourth tr": "x",
                "title -> third td in fourth tr": "y",
                "email -> fourth td in fourth tr": "z",
                "phone -> fifth td in fourth tr": "0"
            }
        ]
    },
    "FIRST TD IN FIFTH TR -> rowspan 1": {
        "SECOND TD IN FIFTH TR -> rowspan 1": [
            {
                "name -> third td in fifth tr": "x",
                "title -> fourth td in fifth tr": "y",
                "email -> fifth td in fifth tr": "z",
                "phone -> sixth td in fifth tr": "0"
            }
        ]
    },
    "FIRST TD IN SIXTH TR -> rowspan 3": {
        "SECOND TD IN SIXTH TR -> rowspan 2": [
            {
                "name -> third td in SIXTH tr": "x",
                "title -> fourth td in SIXTH tr": "y",
                "email -> fifth td in SIXTH tr": "z",
                "phone -> sixth td in SIXTH tr": "0"
            },
            ----> next one indented because of parent rowspan (2)
            {
                "name -> third td in seventh tr": "x",
                "title -> fourth td in seventh tr": "y",
                "email -> fifth td in seventh tr": "z",
                "phone -> sixth td in seventh tr": "0"
            }
        ],
        "SECOND TD IN EIGHT TR -> rowspan 1": [
            {
                "name -> third td in EIGHT tr": "x",
                "title -> fourth td in EIGHT tr": "y",
                "email -> fifth td in EIGHT tr": "z",
                "phone -> sixth td in EIGHT tr": "0"
            }
        ]
    }
}
关键是,阵列可以在两个级别上,也可以在三个级别上

我的代码:

$duplicate_keys = array();
    $country_multiple_rows = false;
    $first_row_has_m_row = 1;
    $middle_row_multiple = 0;
    $skip_first_row = 0;

    // find nr of rows
    foreach($array as $index => $result){
        /////////////////////////////
        /////////////////////////////
        // IF TABLE IS ON 3 LEVELS //
        /////////////////////////////
        /////////////////////////////
        if(isAssoc($result)){
            // COMPARED COUNTRIES
            foreach($result as $head => $content){
                if(isset($head)){
                    $duplicate_keys[$index][$head] = count($result[$head]);
                }
            }

            /////////////////////////////////////////////////////
            // if VAT CONTACT PERSON AND COUNTRY HAS MANY ENTRIES
            /////////////////////////////////////////////////////
            if(count($result) > 1){
                $data .= "<tr class='initial_row'>";
                    foreach($result as $vk => $vv){
                        // get department row_height
                        foreach($duplicate_keys[$index] as $country_index => $country_rows){
                            $multiple_countries_in_department += $country_rows;
                        }

                        if($multiple_countries_in_department > 1){
                            // vat department with multiple rows
                            $data .= "<td " . $type . "='" . $multiple_countries_in_department . "'>" . $index . "</td>";
                        }else{
                            // vat department
                            $data .= "<td>" . $index . "</td>";
                        }

                        $vat_department = $index;
                        $country_of_department = $vk;

                        if($duplicate_keys[$vat_department][$country_of_department] > 1){
                            $first_row_has_m_row += 1;
                        }

                        // table only first row
                        foreach($vv[0] as $i => $v){
                            if($duplicate_keys[$vat_department][$country_of_department] > 1 && $v === $country_of_department){
                                $data .= "<td " . $type . "='" . $duplicate_keys[$vat_department][$country_of_department] . "'>" . $v . "</td>";
                            }else{
                                $data .= "<td>" . $v . "</td>";
                            }
                        }

                        break;
                    }
                $data .= "</tr>";

                // list other values
                $keys = array_keys($array[$vat_department]);
                if($first_row_has_m_row > 1){
                    for($i = 0; $i < count($array[$vat_department]); $i++){
                        $data .= "<tr class='rest_of_initial_row'>";
                            if(count($array[$vat_department][$keys[$i]]) > 1){
                                foreach($array[$vat_department][$keys[$i]][0] as $q => $w){
                                    if ($w === $keys[$i]){
                                        $data .= "<td " . $type . "='" . $duplicate_keys[$vat_department][$w] . "'>" . $w . "</td>";
                                    }else{
                                        $data .= "<td>" . $w . "</td>";
                                    }

                                    $department = $vat_department;
                                    $department_country = $keys[$i];
                                    $last_row_multiple++;
                                }
                            }else{
                                foreach($array[$vat_department][$keys[$i]] as $index => $value){
                                    foreach($value as $j => $l){
                                        if ($l === $keys[$i] && $duplicate_keys[$vat_department][$l] > 1){
                                            $data .= "<td " . $type . "='" . $duplicate_keys[$vat_department][$l] . "'>" . $l . "</td>";
                                        }else{
                                            $data .= "<td>" . $l . "</td>";
                                        }
                                    }
                                }
                            }


                            // if(is_array($array[$vat_department][$keys[$i]])){
                            //  foreach($array[$vat_department][$keys[$i]] as $index => $value){
                            //      // skip first value as it is defined above
                            //      if ($skip_first_row++ === 0) continue;

                            //      foreach($value as $j => $l){
                            //          if($country_of_department !== $l){
                            //              $data .= "<td>" . $l . "</td>";
                            //          }
                            //      }
                            //  }
                            // }
                        $data .= "</tr>";
                    }
                }else{
                    $keys = array_keys($array[$vat_department]);
                    for($i = 1; $i < count($array[$vat_department]); $i++){
                        $data .= "<tr class='secondary_row'>";
                            if(count($array[$vat_department][$keys[$i]]) > 1){
                                foreach($array[$vat_department][$keys[$i]][0] as $q => $w){
                                    if ($w === $keys[$i]){
                                        $data .= "<td " . $type . "='" . $duplicate_keys[$vat_department][$w] . "'>" . $w . "</td>";
                                    }else{
                                        $data .= "<td>" . $w . "</td>";
                                    }

                                    $department = $vat_department;
                                    $department_country = $keys[$i];
                                    $middle_row_multiple++;
                                }
                            }else{
                                foreach($array[$vat_department][$keys[$i]] as $index => $value){
                                    foreach($value as $j => $l){
                                        if ($l === $keys[$i] && $duplicate_keys[$vat_department][$l] > 1){
                                            $data .= "<td " . $type . "='" . $duplicate_keys[$vat_department][$l] . "'>" . $l . "</td>";
                                        }else{
                                            $data .= "<td>" . $l . "</td>";
                                        }
                                    }
                                }
                            }
                        $data .= "</tr>";
                    }

                    if($array[$department][$department_country]){
                        if($last_row_multiple !== 0){
                            for($j = 0; $j < count($array[$department][$department_country]); $j++){
                                $data .= "<tr class='rest_of_secondary_rows'>";                                 
                                    foreach($array[$department][$department_country][$j] as $q => $w){
                                        if ($w !== $department_country){
                                            $data .= "<td>" . $w . "</td>";
                                        }
                                    }
                                $data .= "</tr>";
                            }
                        }
                    }

                    if($array[$department][$department_country]){
                        if($middle_row_multiple !== 0){
                            for($j = 1; $j < count($array[$department][$department_country]); $j++){
                                $data .= "<tr class='rest_of_secondary_rows'>";                                 
                                    foreach($array[$department][$department_country][$j] as $q => $w){
                                        if ($w !== $department_country){
                                            $data .= "<td>" . $w . "</td>";
                                        }
                                    }
                                $data .= "</tr>";
                            }
                        }
                    }


                }

                $multiple_countries_in_department = 0;
                $first_row_has_m_row = 1;
                $middle_row_multiple = 0;
            /////////////////////////////////////////
            // if VAT CONTACT PERSON HAS SINGLE ENTRY
            /////////////////////////////////////////
            }else{
                $data .= "<tr>";
                    foreach($result as $rk => $rv){
                        // create left headers
                        foreach($duplicate_keys[$index] as $dk => $dv){
                            $data .= "<td " . $type . "='" . $dv . "'>" . $index . "</td>";

                            // if country has multiple values
                            if($dv > 1){
                                $country_multiple_rows = true;
                                $row_height = $duplicate_keys[$index][$rk];
                                $country_duplicate_name = $rk;

                                // identify COUNTRY
                                foreach($rv[0] as $h => $v){
                                    // if name is equal to loop item
                                    if($v === $rk){
                                        $data .= "<td " . $type . "='" . $duplicate_keys[$index][$rk] . "'>" . $v . "</td>";
                                    // other country contact details
                                    }else{
                                        $data .= "<td>" . $v . "</td>";
                                    }
                                }

                                break 2;
                            }else{
                                foreach($rv as $h => $v){
                                    foreach($v as $vh => $vv){
                                        $data .= "<td " . $type . "='" . $duplicate_keys[$index][$rk] . "'>" . $vv . "</td>";
                                    }
                                }
                            }
                        }
                    }
                $data .= "</tr>";

                if($country_multiple_rows){
                    // 2nd++ row of country
                    for($i = 1; $i < $row_height; $i++){
                        $data .= "<tr>";
                            foreach($array[$index][$country_duplicate_name][$i] as $ih => $iv){
                                if($iv !== $country_duplicate_name){
                                    $data .= "<td>" . $iv . "</td>";
                                }
                            }
                        $data .= "</tr>";
                    }
                }
                $country_multiple_rows = false;
            }

        /////////////////////////////
        /////////////////////////////
        // IF TABLE IS ON 2 LEVELS //
        /////////////////////////////
        /////////////////////////////
        }else{
            ////////////////
            // NO COMPARE //
            ////////////////
            $duplicate_keys[$index] = count($result);

            /////////////////////////////////////////
            // if VAT CONTACT PERSON HAS MANY ENTRIES
            /////////////////////////////////////////
            if(count($result) > 1){
                $data .= "<tr>";
                    foreach($result as $vk => $vv){
                        // table left header
                        $data .= "<td " . $type . "='" . $duplicate_keys[$index] . "'>" . $index . "</td>";

                        // table only first row
                        foreach($result[0] as $i => $v){
                            $data .= "<td>" . $v . "</td>";
                        }

                        break;
                    }
                $data .= "</tr>";

                // list other values
                for($i = 1; $i < count($result); $i++){
                    $data .= "<tr>";
                        foreach($result[$i] as $index => $value){
                            $data .= "<td>" . $value . "</td>";
                        }
                    $data .= "</tr>";
                }
            /////////////////////////////////////////
            // if VAT CONTACT PERSON HAS SINGLE ENTRY
            /////////////////////////////////////////
            }else{
                $data .= "<tr>";
                    foreach($result as $rk => $rv){
                        // create left headers
                        $data .= "<td " . $type . "='" . $duplicate_keys[$index] . "'>" . $index . "</td>";

                        foreach($rv as $h => $v){
                            // show data
                            $data .= "<td>" . $v . "</td>";
                        }
                    }
                $data .= "</tr>";
            }
        }
    }
$duplicate_keys=array();
$country\u multiple\u rows=false;
$first_row_has_m_row=1;
$middle_row_multiple=0;
$skip_first_row=0;
//查找行数
foreach($index=>$result的数组){
/////////////////////////////
/////////////////////////////
//如果表位于3个级别上//
/////////////////////////////
/////////////////////////////
如果(isAssoc(结果)){
//比较国家
foreach($head=>$content的结果){
如果(isset($头)){
$duplicate_keys[$index][$head]=计数($result[$head]);
}
}
/////////////////////////////////////////////////////
//如果增值税联系人和国家有多个条目
/////////////////////////////////////////////////////
如果(计数($result)>1){
$data.=“”;
foreach($vk=>$vv的结果){
//获取部门行高度
foreach($country\u index=>$country\u行的重复\u键[$index]{
$部门中的多个国家/地区+=$国家/地区行;
}
如果($部门中的多个国家/地区>1){
//多行增值税部门
$data.=''.$index.'';
}否则{
//增值税部门
$data.=''.$index.'';
}
$vat_部门=$index;
$country\u of_department=$vk;
if($duplicate_keys[$vat_department][$country_of_department]>1){
$first_row_有_m_row+=1;
}
//仅表格第一行
foreach($vv[0]为$i=>$v){
if($duplicate_keys[$vat_department][$country_of_department]>1&&$v====$country_of_department){
$data.=''.$v.'';
}否则{
$data.=''.$v.'';
}
}
打破
}
$data.=“”;
//列出其他值
$keys=数组_键($array[$vat_department]);
如果($first_row_has_m_row>1){
对于($i=0;$i1){
foreach($array[$vat\U department][$keys[$i]][0]为$q=>$w){
如果($w===$keys[$i]){
$data.=''.$w.'';
}否则{
$data.=''.$w.'';
}
$部门=$增值税部门;
$department_country=$keys[$i];
$last_row_multiple++;
}
}否则{
foreach($array[$vat\U department][$keys[$i]]作为$index=>$value){
foreach($j=>l){
如果($l===$keys[$i]&&$duplicate\U keys[$vat\U department][$l]>1){
$data.=''.$l.'';
}否则{
$data.=''.$l.'';
}
}
}
}
//如果(是数组($array[$vat\u department][$keys[$i]])){
//foreach($array[$vat\U department][$keys[$i]]作为$index=>$value){
////跳过上面定义的第一个值
//如果($skip_first_row++==0)继续;
//foreach($j=>l){
//如果($country\u of\u department!==$l){
//$data.=''.$l.'';
//          }
//      }
//  }
// }
$data.=“”;
}
}否则{
$keys=数组_键($array[$vat_department]);
对于($i=1;$i1){
foreach($array[$vat\U department][$keys[$i]][0]为$q=>$w){
如果($w===$keys[$i]){
$data.=''.$w.'';
}否则{
$data.=''.$w.'';
}
$部门=$增值税部门;
$department_country=$keys[$i];
$middle_row_multiple++;
}
}否则{
foreach($array[$vat\U department][$key)