Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mysql & PHP] Aanpasbare tabel maken vanuit mysql resultaat

Pagina: 1
Acties:

  • Spin1
  • Registratie: Maart 2009
  • Laatst online: 20-08-2024
Ik wil dus een tabel maken met de volgende opmaak als er 3 resultaten zijn:

value 1value 2value 3


bij 6

value 1value 3value 5
value 2value 4value 6


bij 9
value 1value 4value 7
value 2value 5value 8
value 3value 6value 9


Tot nu toe doe ik met een while loop, de tabel ophalen, en komt alles onder elkaar. Ook weet ik niet hoe ik hem echt mooi moet laten aanpassen (bij de resultaten). Het gaat dus bij de loop constructie fout denk ik.Zou iemand een voorbeeld kunnen geven,

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Waarom een tabel en niet gewoon losse divjes met een float: left en een breedte van 33% van de beschikbare breedte?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Matszs
  • Registratie: Juli 2010
  • Laatst online: 24-11 21:09

Matszs

><>

code:
1
2
3
4
5
6
7
for ($i = 1; $i <= 10; $i++) {
    echo $i;
 if($i == 3 || $i == 6 || $i == 9)
 {
  echo "<br />";
 }
}


iets in deze richting zou je kunnen doen.

  • AW_Bos
  • Registratie: April 2002
  • Nu online

AW_Bos

Liefhebber van nostalgie... 🕰️

matsotten schreef op zondag 10 april 2011 @ 14:16:
code:
1
2
3
4
5
6
7
for ($i = 1; $i <= 10; $i++) {
    echo $i;
 if($i == 3 || $i == 6 || $i == 9)
 {
  echo "<br />";
 }
}


iets in deze richting zou je kunnen doen.
En wat met 12, 15, 18 stuks etc...
Ik denk dat je aan de modulo-operator wat meer hebt :)

code:
1
2
3
4
5
6
for ($i = 1; $i <= 20; $i++) {
    echo $i;
  if (! $i % 3) {
    echo "<br />";
 }
}


Het ligt er verder aan waarvoor je de tabel nodig hebt, het zou zelfs kunnen volstaan met divjes, of beter zelf, een li-element in HTML welke je een display:block; geeft, een leuke width. Als dit NIET voor een cijfertabel is, zou ik dit aanraden.

[ Voor 33% gewijzigd door AW_Bos op 10-04-2011 14:24 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


  • Spin1
  • Registratie: Maart 2009
  • Laatst online: 20-08-2024
Juist, het resultaat kan natuurlijk ook uit een resultaat bestaan met een niet door 3 deelbaar getal.
Maar het probleem is meer het aanpassen.
normaal is het:
1,2,3 <br>
4,5,6 <br>

Maar hoe kan ik oplossen dat die weet wanneer de nieuwe kolom opgemaakt moet worden.
Want bij 9 moet die maar
1
2
3

en bij 15
1
2
3
4
5

Ik denk dat divjes ook wel een betere manier is, ook qua opmaak enz.

[ Voor 9% gewijzigd door Spin1 op 10-04-2011 14:23 ]


  • ID-College
  • Registratie: November 2003
  • Laatst online: 22:14
Spin1 schreef op zondag 10 april 2011 @ 14:23:
Juist, het resultaat kan natuurlijk ook uit een resultaat bestaan met een niet door 3 deelbaar getal.
Maar het probleem is meer het aanpassen.
normaal is het:
1,2,3 <br>
4,5,6 <br>

Maar hoe kan ik oplossen dat die weet wanneer de nieuwe kolom opgemaakt moet worden.
Want bij 9 moet die maar
1
2
3

en bij 15
1
2
3
4
5

Ik denk dat divjes ook wel een betere manier is, ook qua opmaak enz.
Wat dacht je van delen door 3 kolommen? Dat staat hierboven, daar kun je de modulo operator voor gebruiken.

[ Voor 5% gewijzigd door ID-College op 10-04-2011 14:25 ]


  • martijnve
  • Registratie: December 2004
  • Laatst online: 13:36
NMe schreef op zondag 10 april 2011 @ 14:15:
Waarom een tabel en niet gewoon losse divjes met een float: left en een breedte van 33% van de beschikbare breedte?
Of ik snap het niet of dit is gewoon de oplossing.

edit:
@aw_bos:
Het hoeven idd niet perse div's te zijn, maar qua layout lost die float het probleem gewoon op.

[ Voor 17% gewijzigd door martijnve op 10-04-2011 14:26 ]

Mini-ITX GamePC: Core i5 3470 | 16GB DDR3 | GTX 970 4GB | Samsung 830 128GB | Dell u2711 (27", IPS,1440p), 2343BW


  • AW_Bos
  • Registratie: April 2002
  • Nu online

AW_Bos

Liefhebber van nostalgie... 🕰️

Spin1 schreef op zondag 10 april 2011 @ 14:23:
Ik denk dat divjes ook wel een betere manier is, ook qua opmaak enz.
Divjes moet je niet altijd gebruiken. Kijk eerst naar mogelijke andere HTML elementen. <li> volstaat ook zoals ik al eerder zei :).

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

AW_Bos schreef op zondag 10 april 2011 @ 14:25:
[...]

Divjes moet je niet altijd gebruiken. Kijk eerst naar mogelijke andere HTML elementen. <li> volstaat ook zoals ik al eerder zei :).
Dat zei je niet al eerder. ;) Ten tweede is dat een detail. Het gaat erom dat een table hier gewoon niet handig voor werkt. Verder, Spin1: als je het dan toch met tables wil werken dan heeft AW_Bos al lang de oplossing genoemd, kijk eens naar de modulo-operator.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 17:08

TheDane

1.618

Het antwoord is nog helemaal niet helemaal gegeven.

Dat antwoord gaat uit van deze resultaten:

123
456
789

TS wil:
147
258
369

Je zou 3 conditionele blokken in een template file aan kunnen maken, en op basis van het aantal resultaten mod 3 het betreffende record in 1 van de blokken kunnen parsen. Wat voor element je daarvoor gebruikt maakt niet zo uit, maar een <li> zou prima zijn

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 24-11 07:02
Je zou ook de array's kunnen converteren zodat de data in 3 nieuwe array's staan.

Ik neem namelijk aan dat alle data uit 1 array komt.

dan is het gewoon lopen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ar1 = array();
$ar2 = array();
$ar3 = array();

$cnt = 0;
for ($x = 0; $x < $lengthVanJeArray; $x++)
{
    $cnt++;

    switch ($cnt)
    {
        case 1:
            // voeg toe aan array 1
        break;
        case 2:
            // voeg toe aan array 2
        break;
        case 3:
            // voeg toe aan array 3
            // en reset counter
            $cnt = 0;
        break;
    }
}

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Waarom zou je nog drie arrays maken?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$arr = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen');
EchoBlock(0, $arr);
EchoBlock(1, $arr);
EchoBlock(2, $arr);

function EchoBlock($start, $arr, $columns = 3) {
  echo '<ul style="float: left; width: 33%;">';
  for ($i = $start; $i < count($arr); $i += $columns) {
    echo "<li>{$arr[$i]}</li>";
  }
  echo '</ul>';
}

Je hóéft in een loop niet per se alle elementen mee te pakken hoor. :)

[ Voor 3% gewijzigd door NMe op 11-04-2011 13:45 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • kluyze
  • Registratie: Augustus 2004
  • Niet online
NMe schreef op maandag 11 april 2011 @ 13:43:
Waarom zou je nog drie arrays maken?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$arr = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen');
EchoBlock(0, $arr);
EchoBlock(1, $arr);
EchoBlock(2, $arr);

function EchoBlock($start, $arr, $columns = 3) {
  echo '<ul style="float: left; width: 33%;">';
  for ($i = $start; $i < count($arr); $i += $columns) {
    echo "<li>{$arr[$i]}</li>";
  }
  echo '</ul>';
}

Je hóéft in een loop niet per se alle elementen mee te pakken hoor. :)
Alleen komt het resultaat uit een database en moet je op die manier eerst over het result van de query gaan (alle waarden in een array stoppen) en daarna nog eens over de array.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
$arr = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien', 'elf', 'twaalf', 'dertien', 'veertien', 'vijftien');

echo '<ul style="float:left; width:30%; margin:0px">'; 
$elements = count($arr); // mysql_num_rows() 
$rowCount = 1; 
while($row = each($arr)) { // $row=mysql_fetch_array/assoc/...() 
    echo "<li>{$row[1]}</li>"; 
    if( ($rowCount) % ceil($elements/3) == 0 ) { 
        echo '</ul>'; 
        if($rowCount != $elements) { 
            echo '<ul style="float:left; width:30%; margin:0px">'; 
        }
    }
    $rowCount++;
}
?>
each() omdat deze eerst terug geeft en daarna pas verhoogt, dat die een array teruggeeft is minder interessant, buiten het feit dat het zo meer lijkt op een mysql_fetch_array(). Die $row[1] is dus omdat each() een array met (key,value) terug geeft.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
NMe schreef op zondag 10 april 2011 @ 14:15:
Waarom een tabel en niet gewoon losse divjes met een float: left en een breedte van 33% van de beschikbare breedte?
Waarom zou een tabel niet het goede element zijn? Dat is natuurlijk mogelijk, maar wellicht wordt hier gewoon tabulaire data weergegeven?

Oops! Google Chrome could not find www.rijks%20museum.nl


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

kluyze schreef op dinsdag 12 april 2011 @ 21:24:
[...]
Alleen komt het resultaat uit een database en moet je op die manier eerst over het result van de query gaan (alle waarden in een array stoppen) en daarna nog eens over de array.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
$arr = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht', 'negen', 'tien', 'elf', 'twaalf', 'dertien', 'veertien', 'vijftien');

echo '<ul style="float:left; width:30%; margin:0px">'; 
$elements = count($arr); // mysql_num_rows() 
$rowCount = 1; 
while($row = each($arr)) { // $row=mysql_fetch_array/assoc/...() 
    echo "<li>{$row\[1]}</li>"; 
    if( ($rowCount) % ceil($elements/3) == 0 ) { 
        echo '</ul>'; 
        if($rowCount != $elements) { 
            echo '<ul style="float:left; width:30%; margin:0px">'; 
        }
    }
    $rowCount++;
}
?>
each() omdat deze eerst terug geeft en daarna pas verhoogt, dat die een array teruggeeft is minder interessant, buiten het feit dat het zo meer lijkt op een mysql_fetch_array(). Die $row[1] is dus omdat each() een array met (key,value) terug geeft.
Dat is nou niet noemenswaardig veel sneller dan de code die ik schreef terwijl mijn code lineair gezien makkelijker te lezen is, elk element staat netjes op volgorde. ;) Persoonlijke voorkeur waarschijnlijk hoor, maar uitsplitsen naar drie verschillende arrays zoals eerder gesuggereerd werd lijkt me in elk geval geen oplossing. ;)
P_de_B schreef op dinsdag 12 april 2011 @ 21:28:
[...]

Waarom zou een tabel niet het goede element zijn? Dat is natuurlijk mogelijk, maar wellicht wordt hier gewoon tabulaire data weergegeven?
Ik kan me niet zoveel tabulaire data voorstellen waar in elke cel hetzelfde type data staat zonder verdere relatie tussen rij en kolom. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ajakkes
  • Registratie: Maart 2004
  • Laatst online: 16-05 22:32

ajakkes

👑

Deel het aantal resultaten door het aantal kolommen rond af naar boven. Print eerst cel 1, cel 1 + resultaat, cel 1 + resultaat*2 enz. en daarna cel2 enz.

👑

Pagina: 1