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

[PHP] eerste drie rijen opmaken in een foreach

Pagina: 1
Acties:

Onderwerpen


  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
Voor het opmaken van een tabel dacht ik het volgende te doen. Uit een database haal ik gegevens op en zet deze in een tabel. Nu wil ik voor de eerste drie rijen een andere class geven(row1, row2 en row3) zodat ik deze rijen anders kan opmaken.
Nou heb ik het volgende bedacht:
code:
1
2
3
4
5
6
7
8
9
10
11
<?php
$x=0;
foreach($this->item->blaat as $blaat) {
if($x<=2){
$x++;
<td class=row<?php echo $i; ?>>$blaat->blabla </td>
} else {
<td class=row>$blaat->blabla </td>
}
}
?>


Ik twijfel alleen sterk of dit de meest efficiënte manier is aangezien ik nu twee keer de database output moet neerzetten. Doe ik dit zo goed of is er een betere weg?

[ Voor 0% gewijzigd door maxtz0r op 07-01-2011 10:30 . Reden: [/code] vergeten ]

Dying is God's way of telling you, you've been FIRED.


  • apNia
  • Registratie: Juli 2002
  • Laatst online: 28-11 16:26

apNia

Schreeuwen en Nibbits eten!

ja, de normale for-loop? :P

edit: wat zou er niet efficient aan zijn?

[ Voor 45% gewijzigd door apNia op 07-01-2011 10:28 ]


  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
I.c.m de foreach? want dat heb ik al geprobeerd maar dan krijg ik alleen de eerste 3 rijen terwijl ik natuurlijk de rest ook wil zien.

Dying is God's way of telling you, you've been FIRED.


  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 28-11 14:32
Hoe output je de data uit je database? met een while($data = mysql_fetch_array($result)){-achtig iets toevallig?

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Als je die x++ nou eens buiten je if-else statement zet ;)

  • apNia
  • Registratie: Juli 2002
  • Laatst online: 28-11 16:26

apNia

Schreeuwen en Nibbits eten!

nee ik bedoel je houdt x bij als iterator, terwijl je nu met een for-each een normale for zit na te bouwen..

maar ik had te snel gereageerd, het ging jou om dit stukje toch?
code:
1
2
3
<td class=row<?php echo $i; ?>>$blaat->blabla </td>
} else {
<td class=row>$blaat->blabla </td>


of dat niet efficiënter kan?
het kan wel, maar het komt niet de readability ten goede.. en ik denk ook niet dat je er cycles mee bespaart

  • frankivo
  • Registratie: Januari 2002
  • Laatst online: 02-06 13:53
PHP:
1
2
3
4
5
6
<?php
$x=0;
foreach($this->item->blaat as $blaat) {
  echo sprintf('<td class="row%s">%s</td>', $x++, $blaat->blabla);
}
?>


als je in CSS alleen row1,row2,row3 definieert ben je klaar :P

iRacing Profiel


  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
apNia schreef op vrijdag 07 januari 2011 @ 10:27:
ja, de normale for-loop? :P

edit: wat zou er niet efficient aan zijn?
Nou ik moet nu dus twee keer de html in mijn code zetten 1 keer voor de drie rijen met verschillende classes en 1 keer voor de rest van de rijen.
Noxious schreef op vrijdag 07 januari 2011 @ 10:32:
Hoe output je de data uit je database? met een while($data = mysql_fetch_array($result)){-achtig iets toevallig?
De $this->item->blaat is een array die volgens mij opgebouwd wordt uit een object doormiddel van loadObjectList van Joomla(als ik het goed begrijp)
Megamind schreef op vrijdag 07 januari 2011 @ 10:32:
Als je die x++ nou eens buiten je if-else statement zet ;)
Dan heb ik toch nog het zelfde probleem dat ik mijn html output twee keer moet neerzetten? anders kom ik nooit meer in mijn if na 3 keer.

Dying is God's way of telling you, you've been FIRED.


  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 28-11 14:32
maxtz0r schreef op vrijdag 07 januari 2011 @ 10:38:
[...]

De $this->item->blaat is een array die volgens mij opgebouwd wordt uit een object doormiddel van loadObjectList van Joomla(als ik het goed begrijp)
Ahh zo, duidelijk :) ik was al bang dat je eerst alles in een array stopte :P

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17:06
Ben niet zo'n php'er, maar je zou het nog zo kunnen doen (geen idee of dit helemaal goed gaat):

PHP:
1
2
3
4
5
6
7
<?php
$x=0;
foreach($this->item->blaat as $blaat) 
{
  <td class=row<?php ($x++ <= 2 ? echo $x : echo ''); ?>>$blaat->blabla </td>
}
?>

Hail to the king baby!


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Ik snap niet helemaal wat je elke keer bedoelt met '2x de output neerzetten'.

Als je TD zo groot is kan je dit nog doet:

PHP:
1
2
3
4
5
6
7
8
9
for ($i = 0; $i < count($this->item->blaat); $i++)
{
  $blaat = $this->item->blaat[$i];
  $class = "row2";
  if ($i < 3)
    $class = "row1";

  echo sprintf('<td class="%s">%s</td>', $class, $blaat->blabla); 
}

  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
urk_forever schreef op vrijdag 07 januari 2011 @ 10:40:
Ben niet zo'n php'er, maar je zou het nog zo kunnen doen (geen idee of dit helemaal goed gaat):

PHP:
1
2
3
4
5
6
7
<?php
$x=0;
foreach($this->item->blaat as $blaat) 
{
  <td class=row<?php ($x++ <= 2 ? echo $x : echo ''); ?>>$blaat->blabla </td>
}
?>
Dat zou inderdaad werken alleen ben ik niet helemaal duidelijk geweest want ik heb meerdere <td's in 1 rij zitten en dat zou dan niet helemaal goed gaan volgens mij.
frankivo schreef op vrijdag 07 januari 2011 @ 10:36:
PHP:
1
2
3
4
5
6
<?php
$x=0;
foreach($this->item->blaat as $blaat) {
  echo sprintf('<td class="row%s">%s</td>', $x++, $blaat->blabla);
}
?>


als je in CSS alleen row1,row2,row3 definieert ben je klaar :P
Zelfde probleem hier denk ik, ik heb meerder td's per rij(mijn fout had ik moeten melden).

Dying is God's way of telling you, you've been FIRED.


  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 27-11 12:07
Waarom gewoon niet zo (net zoals de bovenstaanden ook zeggen):
PHP:
1
2
3
4
5
6
7
8
//Omdat het een array is kun je ook gewoon de key ervan gebruiken, hoef je niet afzonderlijk een extra. (tenzij het een assoc array is)variabele te declareren.

//$i = 0;
foreach($this->item->blaat as $key => $value) {
    echo '<td class="row'.($key < 3 ? $key : ''').">Inhoud</td>';
    //Of: '<td class="row'.($i < 3 ? $i : ''').">Inhoud</td>';
    //$i++;
}


Indien dit niet is wat je wilt wees dan iets meer specifieker a.u.b.. Ik kan op dit moment geen touw aan je verhaal vastknopen.

[ Voor 15% gewijzigd door Manuel op 07-01-2011 10:52 ]


  • Raymond P
  • Registratie: September 2006
  • Nu online
Denk dat je zoiets bedoelt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$x=0;
foreach($this->item->blaat as %$blaat) {
    if($x <= 2){
        $cssclass = "row{$x}";
        $x++;
    }else{
        $cssclass = 'row';
    }

    echo "<td class='{$cssclass}'>{$blaat->blabla}</td>";
}
?>


Anders moet je echt iets duidelijker zijn.

- knip -


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17:06
Bedoel je soms dat je HTML rij er zo uitziet:

HTML:
1
<tr><td>Eerste kolom</td><td>Tweede kolom</td></tr>


Als dat zo is kan je het beste de code van Raymond P gebruiken.

Hail to the king baby!


  • Noxious
  • Registratie: Juli 2002
  • Laatst online: 28-11 14:32
Je hebt meerdere TD's per rij? Hoe bedoel je?
Zit hieromheen nog een loop met de rows? is het een 2D array?
Als je meerdere row's hebt, waar schrijf je dan je /TR en TR? Die zie ik niet in je stukje code terug?

[ Voor 32% gewijzigd door Noxious op 07-01-2011 10:53 ]


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

NMe

Quia Ego Sic Dico.

Dan hang je een class aan je tr en style je je CSS door middel van "tr.classnaam td { }" of je stylet zelfs alleen de tr? Ik zie geen probleem in meerdere td's op een regel. :?

[ Voor 9% gewijzigd door NMe op 07-01-2011 10:55 ]

'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.


  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
Raymond P schreef op vrijdag 07 januari 2011 @ 10:49:
Denk dat je zoiets bedoelt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$x=0;
foreach($this->item->blaat as %$blaat) {
    if($x <= 2){
        $cssclass = "row{$x}";
        $x++;
    }else{
        $cssclass = 'row';
    }

    echo "<td class='{$cssclass}'>{$blaat->blabla}</td>";
}
?>


Anders moet je echt iets duidelijker zijn.
Dit is inderdaad wat ik bedoel. Dacht dat ik redelijk duidelijk was, volgende keer zal ik proberen duidelijker te zijn. Bedankt voor de hulp!

Dying is God's way of telling you, you've been FIRED.


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

NMe

Quia Ego Sic Dico.

Nee, dat is geen oplossing voor je probleem maar een workaround voor je ogenschijnlijk gebrekkige CSS-kennis. Je hoeft alleen je tr te stylen.

'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.


  • Raymond P
  • Registratie: September 2006
  • Nu online
maxtz0r schreef op vrijdag 07 januari 2011 @ 10:54:
[...]

Dit is inderdaad wat ik bedoel. Dacht dat ik redelijk duidelijk was, volgende keer zal ik proberen duidelijker te zien. Bedankt voor de hulp!
Geen probleem.
Ffies voor de duidelijkheid nog, je eerste voorbeeld is ook prima.
In een if/else statement wordt of alleen de 'if' of alleen de 'else' behandeld, het scheelt dus alleen een stukje html/text.

- knip -


  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
NMe schreef op vrijdag 07 januari 2011 @ 10:58:
Nee, dat is geen oplossing voor je probleem maar een workaround voor je ogenschijnlijk gebrekkige CSS-kennis. Je hoeft alleen je tr te stylen.
Je hebt gelijk...
Raymond P schreef op vrijdag 07 januari 2011 @ 11:03:
[...]


Geen probleem.
Ffies voor de duidelijkheid nog, je eerste voorbeeld is ook prima.
In een if/else statement wordt of alleen de 'if' of alleen de 'else' behandeld, het scheelt dus alleen een stukje html/text.
Precies en dat was ook het doel :D

Dying is God's way of telling you, you've been FIRED.


  • Raymond P
  • Registratie: September 2006
  • Nu online
NMe schreef op vrijdag 07 januari 2011 @ 10:58:
Nee, dat is geen oplossing voor je probleem maar een workaround voor je ogenschijnlijk gebrekkige CSS-kennis. Je hoeft alleen je tr te stylen.
Hoe zou jij dit doen zonder een vervelende increment in css?
Ik kan zo ff snel alleen verzinnen:
tr.classnaam td:nth-of-type(1), td:nth-of-type(2), td:nth-of-type(3) {}

En das natuurlijk geen goede css.

edit:error

[ Voor 7% gewijzigd door Raymond P op 07-01-2011 11:31 . Reden: niet wakker ]

- knip -


  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
thead?

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

NMe

Quia Ego Sic Dico.

Raymond P schreef op vrijdag 07 januari 2011 @ 11:20:
[...]

Hoe zou jij dit doen zonder een vervelende increment in css?
Ik kan zo ff snel alleen verzinnen:
tr.classnaam td:nth-of-type(1), td:nth-of-type(2), td:nth-of-type(3) {}

En das natuurlijk geen goede css.

edit:error
Ik zeg niet dat er geen increment of aparte styling per rij nodig is, ik zeg dat je de td's niet moet willen stylen als je een hele rij gestyled wil hebben. Als je in Word een tabel een randje wil geven doe je dat toch ook in een keer voor de hele tabel in plaats van elke kolom af te gaan? ;)

'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.


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:11

MueR

Admin Devschuur® & Discord

is niet lief

Raymond P schreef op vrijdag 07 januari 2011 @ 11:20:
[...]


Hoe zou jij dit doen zonder een vervelende increment in css?
Ik kan zo ff snel alleen verzinnen:
tr.classnaam td:nth-of-type(1), td:nth-of-type(2), td:nth-of-type(3) {}

En das natuurlijk geen goede css.
Heel ranzig:
Cascading Stylesheet:
1
2
3
.foo td:first-child,
.foo td:first-child + td,
.foo td:first-child + td + td { color: papayawhip; }


Niet aan te raden :+

Anyone who gets in between me and my morning coffee should be insecure.


  • Raymond P
  • Registratie: September 2006
  • Nu online
NMe schreef op vrijdag 07 januari 2011 @ 11:38:
[...]

Ik zeg niet dat er geen increment of aparte styling per rij nodig is, ik zeg dat je de td's niet moet willen stylen als je een hele rij gestyled wil hebben. Als je in Word een tabel een randje wil geven doe je dat toch ook in een keer voor de hele tabel in plaats van elke kolom af te gaan? ;)
Zo voor de hand liggend dat ik het niet eens gezien had en je post heel anders las.

- knip -


Verwijderd

Zijn je keys associatief? Zo nee waarom dan niet gewoon:

code:
1
2
3
foreach($array as $key => $value){
if ($key < 3) ...
}

[ Voor 6% gewijzigd door Verwijderd op 07-01-2011 13:47 ]


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

NMe

Quia Ego Sic Dico.

Associatief is niet hetzelfde als incrementeel en beginnend bij 0.

'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.


  • maxtz0r
  • Registratie: Februari 2007
  • Laatst online: 17-12-2022
ik heb het uiteindelijk zo gedaan:
code:
1
2
3
4
tr.row1 td {
}
tr.row2 td{
enz...

[ Voor 6% gewijzigd door maxtz0r op 07-01-2011 15:44 ]

Dying is God's way of telling you, you've been FIRED.


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:11

MueR

Admin Devschuur® & Discord

is niet lief

Goed, trap ik hem voor de vorm nog even naar Webdesign, Markup & Clientside Scripting

Anyone who gets in between me and my morning coffee should be insecure.


Verwijderd

NMe schreef op vrijdag 07 januari 2011 @ 13:50:
Associatief is niet hetzelfde als incrementeel en beginnend bij 0.
Daarom vraag ik het ook. Zijn ze namelijk incrementeel dan methode zoals ik schets in post.
Pagina: 1