Data horizontaal weergeven
Ik ben nu al een aardige tijd bezig met PHP en begrijp het aardig, maar er is 1 ding waar ik nog niet uit ben gekomen tot nu toe.
Stel dat ik een aantal waarden in een database heb, zeg een lijst met namen. Dan zou ik bijvoorbeeld 3 tabellen hebben:
-----------------------------------------------
| 1 t/m 15 | 15 t/m 30 | 30 t/m 45 |
-----------------------------------------------
Daarin zou ik graag bijvoorbeeld in de eerste kolom alle id's van 1 t/m 15 willen weergeven, tweede kolom 15 t/m 30 etc.
Ik zou ik graag willen weten hoe dit te automatiseren is.
Groet,
Brad
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// onderstaand array is dus jouw database
$array = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien');
// aantal kolommen die je wilt hebben
$kolommen = 3;
// dit is eigenlijk mysql_num_rows()
$max = count($array);
// afblijven
$stap = ceil($max / $kolommen);
echo '<table>';
for($i=0; $i<$stap; $i++)
{
echo '<tr>';
for($j=0; $j<$kolommen; $j++)
{
if(($i + ($j * $stap)) < $max)
{
// hier moet je fetchen en de data neerzetten
echo '<td>' . $array[$i + ($j * $stap)] . '</td>';
}
else
{
echo '<td> </td>';
}
}
echo '</tr>';
}
echo '</table>';
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
// onderstaand array is dus jouw database
$array = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien');
// aantal kolommen die je wilt hebben
$kolommen = 3;
// dit is eigenlijk mysql_num_rows()
$max = count($array);
// afblijven
$stap = ceil($max / $kolommen);
echo '<table>';
for($i=0; $i<$stap; $i++)
{
echo '<tr>';
for($j=0; $j<$kolommen; $j++)
{
if(($i + ($j * $stap)) < $max)
{
// hier moet je fetchen en de data neerzetten
echo '<td>' . $array[$i + ($j * $stap)] . '</td>';
}
else
{
echo '<td> </td>';
}
}
echo '</tr>';
}
echo '</table>';
?>
Voorbeeld
Ik heb al verschillende dingen geprobeerd, zoals kijken of de dag van het arrayelement na de huidige gelijk is aan de huidige, en of dat uur zou bestaan. Alleen tot nu toe werkte nog niets. Ik heb het gevoel dat ik iets met $stap moet doen, maar ik heb geen idee wat.
Edit: aan de hand van het voorbeeld: Mentoruur is eigenlijk dinsdag het eerste, maar staat nu op maandag het 8ste. Daar zou dus een leeg vak moeten komen, en mentoruur moet naar dinsdag het eerste.
Ik zit met een soortgelijk probleem, en heb het via jouw code deels kunnen oplossen, SanThe. Nu is het zo dat ik een rooster probeer te maken. Alleen niet altijd is er het 8ste uur les (wat dus volgens de $stap) variabele wel zou moeten. Dan zou er een leeg vak moeten komen en moet de array doorgaan bovenaan. Echter krijg ik het niet voor elkaar. Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once 'core/configuration.php';
$sQuery = "SELECT *, (SELECT naam FROM vakken WHERE vakken.id = rooster.vak_id) AS vak, (SELECT MAX(uur) FROM rooster AS b WHERE b.dag = rooster.dag) AS maxUur FROM rooster WHERE gebruiker_id = 1 ORDER BY dag,uur ASC";
$sResult = $db->query($sQuery);
$sArray = $db->fetchAll($sQuery);
$sCount = count($sArray);
// aantal kolommen die je wilt hebben
$kolommen = 5;
// afblijven
$stap = ceil($sCount / $kolommen);
echo '<table class="tabel">';
echo '<tr><th>Uur</th><th>Ma</th><th>Di</th><th>Wo</th><th>Do</th><th>Vr</th></tr>';
for($i=0; $i<$stap; $i++)
{
echo '<tr><td>'.($i+1).'</td>';
for($j=0; $j<$kolommen; $j++)
{
if(isset($sArray[$i + ($j * $stap)+1]['dag'])) {
//echo $sArray[$i + ($j * $stap)]['dag']."::".($j+1)."::".$sArray[$i + ($j * $stap)]['maxuur']."::".$stap."<br />";
if(($i + ($j * $stap)) < $sCount)
{
// hier moet je fetchen en de data neerzetten
echo '<td>' . $sArray[$i + ($j * $stap)]['vak'] . '</td>';
}
else
{
echo '<td> </td>';
}
} else {
echo '<td> </td>';
}
}
echo '</tr>';
}
echo '</table>';
?>
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once 'core/configuration.php';
$sQuery = "SELECT *, (SELECT naam FROM vakken WHERE vakken.id = rooster.vak_id) AS vak, (SELECT MAX(uur) FROM rooster AS b WHERE b.dag = rooster.dag) AS maxUur FROM rooster WHERE gebruiker_id = 1 ORDER BY dag,uur ASC";
$sResult = $db->query($sQuery);
$sArray = $db->fetchAll($sQuery);
$sCount = count($sArray);
// aantal kolommen die je wilt hebben
$kolommen = 5;
// afblijven
$stap = ceil($sCount / $kolommen);
echo '<table class="tabel">';
echo '<tr><th>Uur</th><th>Ma</th><th>Di</th><th>Wo</th><th>Do</th><th>Vr</th></tr>';
for($i=0; $i<$stap; $i++)
{
echo '<tr><td>'.($i+1).'</td>';
for($j=0; $j<$kolommen; $j++)
{
if(isset($sArray[$i + ($j * $stap)+1]['dag'])) {
//echo $sArray[$i + ($j * $stap)]['dag']."::".($j+1)."::".$sArray[$i + ($j * $stap)]['maxuur']."::".$stap."<br />";
if(($i + ($j * $stap)) < $sCount)
{
// hier moet je fetchen en de data neerzetten
echo '<td>' . $sArray[$i + ($j * $stap)]['vak'] . '</td>';
}
else
{
echo '<td> </td>';
}
} else {
echo '<td> </td>';
}
}
echo '</tr>';
}
echo '</table>';
?>
Ik heb al verschillende dingen geprobeerd, zoals kijken of de dag van het arrayelement na de huidige gelijk is aan de huidige, en of dat uur zou bestaan. Alleen tot nu toe werkte nog niets. Ik heb het gevoel dat ik iets met $stap moet doen, maar ik heb geen idee wat.
Edit: aan de hand van het voorbeeld: Mentoruur is eigenlijk dinsdag het eerste, maar staat nu op maandag het 8ste. Daar zou dus een leeg vak moeten komen, en mentoruur moet naar dinsdag het eerste.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
@Jezpur: Wat staat er dan allemaal in $sArray?