[PHP] If / else binnen een for each lus?

Pagina: 1
Acties:

Onderwerpen


  • Loadichus
  • Registratie: November 2002
  • Laatst online: 01-06-2021
Via een PHP/ SOAP connectie haal ik een voorraadniveau op. Het veld hoeveelheid van deze voorraad wil ik uitbreiden met een kleuraanduiding op basis van het voorraad niveau.

Met de volgende for each lus haal ik dus de waardes op. Nu wil ik voor de $res->Quantity indien de value dus 0 is een rode achtergrond doen, alle waardes daarboven krijgen een groene achtergrond.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    print "
    <table>
    <tr>
        <th align='left' style='width:200px;'>EAN nummer</th>
        <th align='left' style='width:200px;'>Artikel nummer</th>
        <th align='left' style='width:200px;'>Omschrijving</th>
        <th align='left' style='width:200px;'>Hoeveelheid</th>
        <th align='left' style='width:200px;'>Magazijn</th>
    </tr>
    ";

    foreach ( $result->GetStockInfoResult->StockInfo as $res) {
        print "
        <tr>
        <td>" . $res->EANCode . "</td>
        <td>" . $res->ArticleCode . "</td>
        <td>" . $res->Description . "</td>
        <td>" . $res->Quantity . "</td>
        <td>" . $res->Store . "</td>
        </tr>";
    }
    
    print "</table>";


Het bepalen van de achtergrond kleur zal waarschijnlijk zoiets worden:
code:
1
2
3
4
5
6
7
8
IF $res->Quantity = 0
    {
    print " <td style='background-color:#CC0000;'>" . $res->Quantity . "</td>
    } 
ELSE 
    { 
    print " <td style='background-color:#00CC00;'>" . $res->Quantity . "</td>
    }


Maar hoe krijg ik nu een IF/ ELSE statement in een for each lus op één veld? Of denk ik nu helemaal verkeerd?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-11 09:49

Bosmonster

*zucht*

Plak codestukje 2 in codestukje 1.

Wat is precies het probleem dat je tegenkomt? Want momenteel zie ik er even geen :)

[ Voor 56% gewijzigd door Bosmonster op 31-08-2012 09:55 ]


  • pachacuti
  • Registratie: Januari 2002
  • Laatst online: 24-11 11:32
Met ^^

code:
1
2
3
4
5
6
7
foreach(...){
   
   if(...) {

   }

}

  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 16:22

Tjark

DON'T PANIC

Bosmonster schreef op vrijdag 31 augustus 2012 @ 09:55:
Plak codestukje 2 in codestukje 1.
QFT....
(ik snap de vraag ook niet waarom het ueberhaupt een probleem zou zijn?)
code:
1
2
3
4
5
6
7
8
9
10
11
foreach ( $result->GetStockInfoResult->StockInfo as $res) {
        $res->Quantity == 0 ? $color = '#CC0000' : $color = '#00CC00';
        print "
        <tr>
        <td>" . $res->EANCode . "</td>
        <td>" . $res->ArticleCode . "</td>
        <td>" . $res->Description . "</td>
        <td  style='background-color:$color;'>" . $res->Quantity . "</td>
        <td>" . $res->Store . "</td>
        </tr>";
    }

(en mooier zou zijn om die niet met style= op te lossen natuurlijk...

[ Voor 0% gewijzigd door Tjark op 31-08-2012 10:04 . Reden: ' wel afsluiten, thx n2theb ]

*insert signature here


  • n2theb
  • Registratie: Augustus 2012
  • Laatst online: 16:03

n2theb

Tweakers Abonnee

Je kan in de foreach een if en else maken met een variabel en deze dan meegeven aan de tr of td.

Voorbeeld aan de hand van jouw code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?PHP
foreach ( $result->GetStockInfoResult->StockInfo as $res) 
{
         $color = ( $res->Quantity > 0 ) ? '#00CC00' : '#CC0000';
         print "
         <tr style='background-color:". $color ."'>
               <td>" . $res->EANCode . "</td>
               <td>" . $res->ArticleCode . "</td>
               <td>" . $res->Description . "</td>
               <td>" . $res->Quantity . "</td>
               <td>" . $res->Store . "</td>
        </tr>";
}


Overigens is het netter om een div class mee te geven en niet een background-color.
Ik hoop dat dit je verder helpt.

[ Voor 6% gewijzigd door n2theb op 31-08-2012 09:59 ]


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 16:22

Tjark

DON'T PANIC

@n2theb : :p

*insert signature here


  • n2theb
  • Registratie: Augustus 2012
  • Laatst online: 16:03

n2theb

Tweakers Abonnee

Je vergeet overigens bij jou nog deze af te sluiten: <td style='background-color:$color;> :$
En als je nou $color voor de if zet is het nog ietsje korter (a)

  • Kama
  • Registratie: Mei 2002
  • Laatst online: 15-11 11:19

Kama

Game Coordinator

Nog beter is om niet de kleur te zetten, maar een css class, en de kleur in een css file te definieren

$class = ($res->$Quantity>0) ? 'instock':'nostock';

en dan:

.. <tr class='". $class ."'> ..

drs. Kama


  • n2theb
  • Registratie: Augustus 2012
  • Laatst online: 16:03

n2theb

Tweakers Abonnee

Kama schreef op vrijdag 31 augustus 2012 @ 10:02:
Nog beter is om niet de kleur te zetten, maar een css class, en de kleur in een css file te definieren

$class = ($res->$Quantity>0) ? 'instock':'nostock';

en dan:

.. <tr class='". $class ."'> ..
Ik ben het eens met de reactie hierboven! Een klasse van css gebruiken is ook nog is herbruikbaar op andere plekken en is makkelijker aan te passen.

  • Loadichus
  • Registratie: November 2002
  • Laatst online: 01-06-2021
Bedankt voor de snelle antwoorden. Ik was zo druk bezig dit met if/ then op te lossen dat ik domweg vergeten ben om gewoon een variabele te defineren....

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    foreach ( $result->GetStockInfoResult->StockInfo as $res) {
        
        $color = ( $res->Quantity > 0 ) ? '#00CC00' : '#CC0000';
        print "
        <tr>
        <td>" . $res->EANCode . "</td>
        <td>" . $res->ArticleCode . "</td>
        <td>" . $res->Description . "</td>
        <td style='background-color:$color;>" . $res->Quantity . "</td>
        <td>" . $res->Store . "</td>
        </tr>";
    }
    
    print "</table>";


Deze werkt precies zoals ik het voor ogen heb.
Tjark schreef op vrijdag 31 augustus 2012 @ 09:57:
(en mooier zou zijn om die niet met style= op te lossen natuurlijk...
Hoe zou dit beter kunnen dan? Naast dat je dit beter in de stylesheet kan verwerken.

[ Voor 3% gewijzigd door Loadichus op 31-08-2012 10:07 ]


  • Tjark
  • Registratie: Juni 2000
  • Laatst online: 16:22

Tjark

DON'T PANIC

Hoe zou dit beter kunnen dan?
Check Kama's post :)

*insert signature here


  • Loadichus
  • Registratie: November 2002
  • Laatst online: 01-06-2021
Genoteerd en neem ik mee in de stylesheet. Wederom bedankt.

  • Loadichus
  • Registratie: November 2002
  • Laatst online: 01-06-2021
De waardes worden toch niet helemaal juist mee gegeven

Zonder kleurcodes geeft dit als resultaat
Afbeeldingslocatie: http://s12.postimage.org/oasmo7oct/image.jpg

Met de kleurcodes geeft dit als resultaat
Afbeeldingslocatie: http://s17.postimage.org/tkxtv70vz/image.jpg

code:
1
$color = ( $res->Quantity > 0 ) ? '#00CC00' : '#CC0000';


Ik krijg nu minder resultaten, maar ook het laatste resultaat wat groter dan 0 is krijgt een rode achtergrond mee.

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Tijd om te gaan Debuggen.

"Any sufficiently advanced technology is indistinguishable from magic."


  • Loadichus
  • Registratie: November 2002
  • Laatst online: 01-06-2021
Gevonden, topic mag mij betreft op slot. Bedankt voor het meedenken.

  • armageddon_2k1
  • Registratie: September 2001
  • Laatst online: 27-07 10:18
Wat heb je precies gevonden dan? Dat is wellicht interessant.

Engineering is like Tetris. Succes disappears and errors accumulate.


  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 16:38
Waarschijnlijk een typfout gefixt (die missend ' bijvoorbeeld), lijkt me nou niet echt heel tricky dit

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Loadichus schreef op vrijdag 31 augustus 2012 @ 13:24:
[...]


Gevonden, topic mag mij betreft op slot. Bedankt voor het meedenken.
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde. Daar zul je ook lezen dat we 't op prijs stellen als je je oplossing even post zodat anderen in de toekomst ook nog iets aan je topic hebben als ze de search/google hebben en op dit topic stuiten ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Loadichus
  • Registratie: November 2002
  • Laatst online: 01-06-2021
Barryvdh schreef op vrijdag 31 augustus 2012 @ 15:44:
Waarschijnlijk een typfout gefixt (die missend ' bijvoorbeeld)
Helaas maar waar ... ging alleen om één missende ' (achter de $color)
[b][message=38841839,noline]
code:
1
<td style='background-color:$color;>" . $res->Quantity . "</td>
RobIII schreef op vrijdag 31 augustus 2012 @ 16:11:
Een slotje is niet nodig op een topic als je je oplossing hebt. Zie daarvoor ook onze faq betreffende topiceinde.
Gelezen en oplossing genoteerd

[ Voor 30% gewijzigd door Loadichus op 31-08-2012 16:17 ]

Pagina: 1