私は配列で行きます。問題は、筋肉/心臓の結果をディスパッチすることです。
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>";
}