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;}}}
答案 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)
我问周围,最后得到了答案和解决方案。
基本上,重新排列和简化数组以获得[x]和[y]值。然后将[x]添加到自己的数组中。之后,使用[x]作为数组键来循环数据,以获得[y]值。
我已经重新安排我的数组以简化这个过程和我的数组