我会选择阵列。问题在于发送肌肉/心脏结果。
要以 HTML 格式格式化并获取标题,假设我们首先有有氧运动,然后是肌肉。
因此,您选择该日期的所有行,按用户名和有氧运动/肌肉排序。
然后:
$users = array();
$maxes = array('cardio' => 0, 'muscle' => 0);
foreach($row = ...)
{
list($user, $com, $name, $result) = $row;
if (!isset($users[$user]))
$userData = array('cardio' => array(), 'muscle' => array());
else
$userData = $users[$user];
$userData[$com][] = array($name, $result);
if (count($userData[$com]) > $maxes[$com])
$maxes[$com] = count($userData[$com]);
$users[$user] = $userData;
}
现在你有类似的东西:
'John': {
'cardio': [
[ 'rowing', '12 miles' ],
[ 'running', '2 miles' ],
],
'muscle': [ ]
},
'Jack': {
'cardio': [ ],
'muscle': [ 'bench', '300lbs' ],
}
为了在 HTML 中格式化,我们保存了任何用户的最大有氧运动数量和最大肌肉数量。因此,1 + MaxC + MaxM 列的表将包含所有用户,按顺序排列:
Name Cardio 1 Cardio 2 Muscle 1
John Rowing Running -
12 miles 2 miles
Jack - - Bench
300lbs
并构建它:
// First the header
print "<tr>";
print "<th>Name</th>";
for ($i = 0; $i < $maxes['cardio']; $i++)
print "<th>Cardio " . ($i+1) . "</th>";
for ($i = 0; $i < $maxes['muscle']; $i++)
print "<th>Muscle ($i+1)</th>";
print "</tr>";
foreach($users as $user => $info)
{
print "<tr><td>$user</td>";
foreach(array('cardio','muscle') as $key)
{
$data = $info[$key];
for ($i = 0; $i < $maxes[$key]; $i++)
{
print "<td>";
if (isset($data[$i]))
{
list($name, $result) = $data[$i];
print "$name<br />$result";
}
else print '-';
print "</td>";
}
}
print "</tr>";
}