PHPを使用して書式設定されたHTMLタイムテーブルを表示しようとしています。PHPデータの多次元配列をHTMLテーブルに変換するには?
多次元配列のデータをHTMLテーブルに出力したい場合は、合計8つのカラム(各日のカラムMon-Sunと各セッションの開始時間を示す左側のカラム)。 行の量は、毎日のセッションの数によって異なります。
私のソリューションはある程度機能しており、次の画像で出力を確認できますが、何らかの理由で余分な行が生成されていることがわかります。 1日のセッションの量に関係なく、常に1行だけ追加行です。
データは次のように表される:あなたが見ることができるように
Array
(
[0] => Array
(
[0] => Array
(
[id] => 1
[name] => A Monday Session
[start_time] => 10:00
)
[1] => Array
(
[id] => 5
[name] => Another Monday Session
[start_time] => 11:00
)
[2] => Array
(
[id] => 6
[name] => Yet Another Monday Session
[start_time] => 12:00
)
)
[1] => Array
(
[0] => Array
(
)
)
[2] => Array
(
[0] => Array
(
[id] => 8
[name] => A Wednesday Session
[start_time] => 14:30
)
)
[3] => Array
(
[0] => Array
(
[id] => 3
[name] => A Thursday Session
[start_time] => 09:00
)
)
[4] => Array
(
[0] => Array
(
)
)
[5] => Array
(
[0] => Array
(
)
)
[6] => Array
(
[0] => Array
(
[id] => 4
[name] => A Sunday Session
[start_time] => 13:00
)
)
)
はメインキーは曜日を表します。 0 =月曜日、1 =火曜日など 毎日セッションのリストがあります。この例では、月曜日に3つのセッションがあり、水、木、サンにはそれぞれ1つのセッションがあります。
これらはすべて開始時刻が異なることに注意してください。重複した開始時刻を持つセッションにデータが導入されると、同じ行を共有するのではなく、追加の行も作成されます。木曜日のセッションを月曜日と同じにするために10:00に変更した出力を参照してください。
そしてここに私のバギーの解決策があります。私は、私が間違っている行のコメントをマークしました。
// $sessionRows is the array of arrays containing the data above.
// Grabs array of session times from $sessionRows that has been sorted and duplicates removed.
// Current values: Array ([0] => 09:00 [1] => 10:00 [2] => 11:00 [3] => 12:00 [4] => 13:00 [5] => 14:30)
$sessionTimes = $this->getSessionTimes($days);
$numOfRows = count($sessionTimes);
$numOfCols = $dayIdx;
// Create grid with correct dimensions and rows represented by the session times
$grid = array();
for($i=0;$i<count($sessionTimes);$i++) {
$row = array();
for($j=0;$j<$numOfCols;$j++) {
$row[] = '<td></td>';
}
$grid[$sessionTimes[$i]] = $row;
}
// Populate grid with session info added to correct coordinates.
for($i=0;$i<$numOfCols;$i++) {
echo count($sessionRows[$i]);
for($j=0;$j<count($sessionRows);$j++) {
$grid[$sessionRows[$i][$j]['start_time']][$i] = $sessionRows[$i][$j];
}
}
$rows='';
$idx = 0;
foreach($grid as $rowArray) {
$rows .= '<tr>';
/*** This lines is the problem! It adds the session time as the first column. ***/
$rows .= '<td class="time-col">'.$sessionTimes[$idx].'</td>';
for($i=0;$i<count($rowArray);$i++) {
if(!empty($rowArray[$i]['name'])){
$rows .= '<td>'.$rowArray[$i]['name'].'<br>'.$rowArray[$i]['start_time'].'</td>';
} else {
$rows .= '<td> - </td>';
}
}
$rows .= '</tr>';
$idx++;
}
return $rows;
セッションの曜日をどのように知っていますか? – Misunderstood
ちょうど配列が配列されているためです。 0 =月曜日、1 =火曜日など – Muzzstick