从数组创建具有不同长度和值的PHP表

时间:2017-07-10 09:04:09

标签: php html

Array
(
[25p] => Array
    (
        [0] => Array
            (
                [id] => 353
                [label] => C81
                [casting] => 21 Mar 2017
                [data] => Array
                    (
                        [0] => Array
                            (
                                [x] => 1
                                [y] => 6.220000
                            )

                        [1] => Array
                            (
                                [x] => 2
                                [y] => 10.220000
                            )

                        [2] => Array
                            (
                                [x] => 7
                                [y] => 21.440000
                            )

                        [3] => Array
                            (
                                [x] => 28
                                [y] => 30.780000
                            )

                    )

            )

        [1] => Array
            (
                [id] => 354
                [label] => C82
                [casting] => 21 Mar 2017
                [data] => Array
                    (
                        [0] => Array
                            (
                                [x] => 1
                                [y] => 8.000000
                            )

                        [1] => Array
                            (
                                [x] => 3
                                [y] => 20.890000
                            )

                        [2] => Array
                            (
                                [x] => 6
                                [y] => 30.670000
                            )

                        [3] => Array
                            (
                                [x] => 7
                                [y] => 32.555000
                            )

                        [4] => Array
                            (
                                [x] => 28
                                [y] => 51.110000
                            )

                    )

            )

        [2] => Array
            (
                [id] => 355
                [label] => C83
                [casting] => 21 Mar 2017
                [data] => Array
                    (
                        [0] => Array
                            (
                                [x] => 1
                                [y] => 7.110000
                            )

                        [1] => Array
                            (
                                [x] => 3
                                [y] => 19.780000
                            )

                        [2] => Array
                            (
                                [x] => 6
                                [y] => 23.560000
                            )

                        [3] => Array
                            (
                                [x] => 7
                                [y] => 32.225000
                            )

                        [4] => Array
                            (
                                [x] => 15
                                [y] => 38.890000
                            )

                    )

            )

        [age] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 3
                [3] => 6
                [4] => 7
                [5] => 15
                [6] => 28
            )

    )

)

我想基于[age]值创建一个表作为标题。我设法创建表但问题是,我的数据没有正确放置。 [age]基于[data][x]值的唯一展平列表。从数组数据中,C83不应包含2D数据,因为没有[data][x] = 2

+---------------+----------+-----------+-----------+-----------+-----------+-----+-----+
| Monitor Label |    1D    |    2D     |    3D     |    6D     |    7D     | 15D | 28D |
+---------------+----------+-----------+-----------+-----------+-----------+-----+-----+
| C81           | 6.220000 | 10.220000 | 21.440000 | 30.780000 |           |     
|     |
| C82           | 8.000000 | 20.890000 | 30.670000 | 32.555000 | 51.110000 |     
|     |
| C83           | 7.110000 | 19.780000 | 23.560000 | 32.225000 | 38.890000 |     
|     |
+---------------+----------+-----------+-----------+-----------+-----------+-----+-----+

下面是我生成上表的代码

    //test creating HTML
foreach($graph as $grade => $data )
{
  echo '<strong>'.strtoupper($grade).'</strong></br>';
  //start the table for each grade
  echo '<table border=1>';
  echo '<thead>';
    echo '<tr>';
    echo '<th>Monitor Label</th>';

    for($i=0;$i < count($data['age']);$i++)
    {
      echo '<th>'.$data['age'][$i].'D</th>';
    }
    echo '</tr>';
  echo '</thead>';
  echo '<tbody>';

  for ($i=0;$i < count($data)-1; $i++)
  {
    echo '<tr>';
    echo '<td>'.$data[$i]['label'].'</td>';
    foreach($data[$i]['data'] as $x)
    {
      echo '<td>'.$x['y'].'</td>';
    }
    echo '</tr>';
  }

  echo '</tbody>';
  echo '</table>';
}

部分[data][y]应该丢失,我想用 - (破折号)或#NA替换它,但它只填充表格列。

如果有人对数据感兴趣,这里是实际的序列化数据

a:4:{s:3:"30n";a:2:{i:0;a:4:{s:2:"id";i:423;s:5:"label";s:3:"D43";s:7:"casting";s:11:"05 Apr 2017";s:4:"data";a:5:{i:0;a:2:{s:1:"x";i:1;s:1:"y";s:8:"7.330000";}i:1;a:2:{s:1:"x";i:2;s:1:"y";s:9:"13.560000";}i:2;a:2:{s:1:"x";i:3;s:1:"y";s:9:"16.890000";}i:3;a:2:{s:1:"x";i:7;s:1:"y";s:9:"38.000000";}i:4;a:2:{s:1:"x";i:27;s:1:"y";s:9:"32.670000";}}}s:3:"age";a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:7;i:4;i:27;}}s:3:"30p";a:5:{i:0;a:4:{s:2:"id";i:428;s:5:"label";s:3:"D48";s:7:"casting";s:11:"05 Apr 2017";s:4:"data";a:5:{i:0;a:2:{s:1:"x";i:1;s:1:"y";s:8:"8.000000";}i:1;a:2:{s:1:"x";i:2;s:1:"y";s:9:"15.560000";}i:2;a:2:{s:1:"x";i:3;s:1:"y";s:9:"20.670000";}i:3;a:2:{s:1:"x";i:7;s:1:"y";s:9:"30.440000";}i:4;a:2:{s:1:"x";i:27;s:1:"y";s:9:"42.885000";}}}i:1;a:4:{s:2:"id";i:238;s:5:"label";s:3:"a70";s:7:"casting";s:11:"23 Jan 2017";s:4:"data";a:5:{i:0;a:2:{s:1:"x";i:1;s:1:"y";s:8:"9.560000";}i:1;a:2:{s:1:"x";i:3;s:1:"y";s:9:"18.890000";}i:2;a:2:{s:1:"x";i:4;s:1:"y";s:9:"22.890000";}i:3;a:2:{s:1:"x";i:8;s:1:"y";s:9:"31.775000";}i:4;a:2:{s:1:"x";i:28;s:1:"y";s:9:"40.220000";}}}i:2;a:4:{s:2:"id";i:240;s:5:"label";s:3:"a72";s:7:"casting";s:11:"23 Jan 2017";s:4:"data";a:6:{i:0;a:2:{s:1:"x";i:1;s:1:"y";s:8:"9.330000";}i:1;a:2:{s:1:"x";i:2;s:1:"y";s:9:"16.000000";}i:2;a:2:{s:1:"x";i:3;s:1:"y";s:9:"21.560000";}i:3;a:2:{s:1:"x";i:8;s:1:"y";s:9:"34.890000";}i:4;a:2:{s:1:"x";i:28;s:1:"y";s:9:"46.000000";}i:5;a:2:{s:1:"x";i:31;s:1:"y";s:9:"52.220000";}}}i:3;a:4:{s:2:"id";i:235;s:5:"label";s:3:"a68";s:7:"casting";s:11:"21 Jan 2017";s:4:"data";a:4:{i:0;a:2:{s:1:"x";i:2;s:1:"y";s:8:"7.560000";}i:1;a:2:{s:1:"x";i:4;s:1:"y";s:9:"15.560000";}i:2;a:2:{s:1:"x";i:10;s:1:"y";s:9:"23.890000";}i:3;a:2:{s:1:"x";i:28;s:1:"y";s:9:"32.440000";}}}s:3:"age";a:10:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;i:7;i:5;i:8;i:6;i:10;i:7;i:27;i:8;i:28;i:9;i:31;}}s:3:"35p";a:5:{i:0;a:4:{s:2:"id";i:424;s:5:"label";s:3:"D44";s:7:"casting";s:11:"05 Apr 2017";s:4:"data";a:5:{i:0;a:2:{s:1:"x";i:1;s:1:"y";s:8:"8.670000";}i:1;a:2:{s:1:"x";i:2;s:1:"y";s:8:"9.560000";}i:2;a:2:{s:1:"x";i:3;s:1:"y";s:9:"18.440000";}i:3;a:2:{s:1:"x";i:7;s:1:"y";s:9:"33.110000";}i:4;a:2:{s:1:"x";i:27;s:1:"y";s:9:"40.335000";}}}i:1;a:4:{s:2:"id";i:425;s:5:"label";s:3:"D45";s:7:"casting";s:11:"05 Apr 2017";s:4:"data";a:5:{i:0;a:2:{s:1:"x";i:1;s:1:"y";s:8:"8.890000";}i:1;a:2:{s:1:"x";i:2;s:1:"y";s:9:"19.560000";}i:2;a:2:{s:1:"x";i:3;s:1:"y";s:9:"26.890000";}i:3;a:2:{s:1:"x";i:7;s:1:"y";s:9:"39.780000";}i:4;a:2:{s:1:"x";i:27;s:1:"y";s:9:"49.445000";}}}i:2;a:4:{s:2:"id";i:426;s:5:"label";s:3:"D46";s:7:"casting";s:11:"05 Apr 2017";s:4:"data";a:5:{i:0;a:2:{s:1:"x";i:1;s:1:"y";s:8:"6.670000";}i:1;a:2:{s:1:"x";i:2;s:1:"y";s:9:"16.440000";}i:2;a:2:{s:1:"x";i:3;s:1:"y";s:9:"16.440000";}i:3;a:2:{s:1:"x";i:7;s:1:"y";s:9:"26.670000";}i:4;a:2:{s:1:"x";i:29;s:1:"y";s:9:"40.670000";}}}i:3;a:4:{s:2:"id";i:269;s:5:"label";s:4:"NS23";s:7:"casting";s:11:"01 Feb 2017";s:4:"data";a:3:{i:0;a:2:{s:1:"x";i:1;s:1:"y";s:8:"6.670000";}i:1;a:2:{s:1:"x";i:5;s:1:"y";s:9:"21.780000";}i:2;a:2:{s:1:"x";i:7;s:1:"y";s:9:"26.000000";}}}s:3:"age";a:7:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:5;i:4;i:7;i:5;i:27;i:6;i:29;}}s:3:"45p";a:3:{i:0;a:4:{s:2:"id";i:233;s:5:"label";s:3:"A65";s:7:"casting";s:11:"21 Jan 2017";s:4:"data";a:4:{i:0;a:2:{s:1:"x";i:2;s:1:"y";s:9:"15.110000";}i:1;a:2:{s:1:"x";i:5;s:1:"y";s:9:"32.440000";}i:2;a:2:{s:1:"x";i:10;s:1:"y";s:9:"44.665000";}i:3;a:2:{s:1:"x";i:28;s:1:"y";s:9:"55.483333";}}}i:1;a:4:{s:2:"id";i:234;s:5:"label";s:3:"a66";s:7:"casting";s:11:"21 Jan 2017";s:4:"data";a:4:{i:0;a:2:{s:1:"x";i:2;s:1:"y";s:9:"14.220000";}i:1;a:2:{s:1:"x";i:5;s:1:"y";s:9:"33.780000";}i:2;a:2:{s:1:"x";i:10;s:1:"y";s:9:"44.780000";}i:3;a:2:{s:1:"x";i:28;s:1:"y";s:9:"55.560000";}}}s:3:"age";a:4:{i:0;i:2;i:1;i:5;i:2;i:10;i:3;i:28;}}}

3 个答案:

答案 0 :(得分:0)

您可以尝试以下代码,其中i循环遍历年龄并检查数据中的“x”值

//test creating HTML
 foreach($graph as $grade => $data )

 echo '<strong>'.strtoupper($grade).'</strong></br>';
 //start the table for each grade
 echo '<table border=1>';
 echo '<thead>';
 echo '<tr>';
 echo '<th>Monitor Label</th>';

 for($i=0;$i < count($data['age']);$i++)
 {
    echo '<th>'.$data['age'][$i].'D</th>';
 }
 echo '</tr>';
 echo '</thead>';
 echo '<tbody>';

 for ($i=0;$i < count($data)-1; $i++)
 {
    echo '<tr>';
    echo '<td>'.$data[$i]['label'].'</td>';
    for($j=0;$j < count($data['age']);$j++){
       foreach($data[$i]['data'] as $x)
       {
           if($x['x'] == $data['age'][$j])
             echo '<td>'.$x['y'].'</td>';
           else
             echo '<td> #NA </td>';
       }
    }
    echo '</tr>';
  }

  echo '</tbody>';
  echo '</table>';
 }

答案 1 :(得分:0)

您需要在所有count($data['age']数组上循环$data[$i]['data']次迭代,但每次检查是否存在具有该出现的数组。如果是,则打印['y']号码,如果不是,则在表格列中打印-N/A

替换

foreach($data[$i]['data'] as $x)
{
  echo '<td>'.$x['y'].'</td>';
}

只会循环['data']实际存在的次数

for ($y=0; $y < count($data['age']; $y++) {
    if ( isset($data[$i]['data'][$y]) ) {
        if ( $data[$i]['data'][$y]['x'] == $data['age'][$i] ) {
            echo '<td>'.$data[$i]['data'][$y]['y'].'</td>';
        } else {
            echo '<td>N/A</td>';
        }
    } else {
        echo '<td>N/A</td>';
    }
}

答案 2 :(得分:0)

我问周围,最后得到了答案和解决方案。

phpfreaks Forum

基本上,重新排列和简化数组以获得[x]和[y]值。然后将[x]添加到自己的数组中。之后,使用[x]作为数组键来循环数据,以获得[y]值。

我已经重新安排我的数组以简化这个过程和我的数组