[php] case switch

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste php freakerz..
ik heb een website genaamd AmicoProject.NL en ben er al een tijdje aan bezig.
Ik heb een zogenaamd "profielen" systeem en wou dit uitbreiden met informatie
van de scooter van "die" gebruiker.

Ik heb een mysql tabel gemaakt met de kolommen:

+----------+--------------+---------+--------+-------------+
|cillinder |carburateur|uitlaat |krukas | luchtfilter |
+----------+--------------+---------+--------+-------------+

Deze kolommen zijn gevult met waarden van de gebruikers.
Iedere gebruiker heeft een eigen rij met zijn setup om zo maar even te noemen.
Wat ik nu wil doen is het volgende:

Ik wil dat alle informatie die de gebruiker heeft ingevult wordt geprint op de pagina..
Normaal doe ik dat met een simpele while of iets dergelijks..
Maar om het profiel een beetje overzichtelijk te houden, en men niet persee alles in hoeft te vullen.

Nu heb ik bij mij eigen zitten nadenken hoe ik dit moet oplossen.
Ik had een aantal dingen gebrobeerd maar volgens mij zijn die niet effectief :P
Maar toch krijg je ze:

PHP:
1
2
3
4
5
6
7
8
$perso_array = mysql_fetch_array($db_result);
        foreach($perso_array as $waarde)
        {
                if(!empty($waarde) )
                {
                        echo "treu";
                }
        }

maar dit zou betekenen dat ik niet alles op eigen volgorde kan printen.
Alleen als ik een key opgeef..maar dan nog niet zoals ik het wil...
Nu dacht ik dat het misschien met een case op te lossen is..
Maar mijn vraag luid is dit zo en zoja hoe gebruik je hem eigenlijk. Want in de php manual snap ik het
niet helemaal eigenlijk.
moet het dan ongeveer zo:
PHP:
1
2
3
4
5
6
7
8
9
$perso_array = mysql_fetch_array($db_result);
switch($perso_array)
{
        case(!empty($perso_array['cillinder']) )
                echo 'Cillinder is ' .$perso_array['cilinder'];
        case(!empty($perso_array['carburateur']) )
                echo 'Cillinder is ' .$perso_array['carburateur'];
        //enz enz..
}


Weet iemand dus of ik zo de functie goed gebruik, en of het wel mogelijk is met de case switch?

Alvast heel erg bedankt :D..

[ Voor 4% gewijzigd door Verwijderd op 23-03-2004 15:11 ]


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
ik zie neit hoe een case hier nut kan hebben, tbh.

Kun je niet gewoon een paar if's achter elkaar zetten?

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nou het is een tabel met 32 kolommen..

Jouw idee is mijn laatste uitweg als het op geen andere manier kan.
Ik zoek gewoon iets ergonomisch waarmee ik waardes op alle velden op eigen volgorde op leegheid kan checken, en daarna printen..

Acties:
  • 0 Henk 'm!

Verwijderd

Met een foreach lus :)

[ Voor 47% gewijzigd door Verwijderd op 23-03-2004 15:16 ]


Acties:
  • 0 Henk 'm!

  • reinhrst
  • Registratie: December 2003
  • Niet online
Bekijk het voorbeeld op http://nl2.php.net/manual/en/control-structures.switch.php

PHP:
1
2
3
4
5
6
7
if ($i == 0) {
   echo "i equals 0";
} elseif ($i == 1) {
   echo "i equals 1";
} elseif ($i == 2) {
   echo "i equals 2";
}

is gelijk aan
PHP:
1
2
3
4
5
6
7
8
9
10
11
switch ($i) {
case 0:
   echo "i equals 0";
   break;
case 1:
   echo "i equals 1";
   break;
case 2:
   echo "i equals 2";
   break;
}



Een case kan dus niets wat een if/elseif/else niet kan, het is alleen maar om je code wat beter leesbaar te maken:

Bij switch zeg je om welke variabele je switcht. Vervolgens geven de 'case' clausules aan welke waarde die variabele heeft. Je kan nooit switchen op een associatove array, zoals jij probeert.

[ Voor 8% gewijzigd door reinhrst op 23-03-2004 15:18 ]

Claude


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Een switch is alleen handig als je 1 expressie wilt testen op verschillende uitkomsten, en is hier dus totaal niet van belang. Maar waarom definieer je je volgorde niet gewoon als een array?

PHP:
1
2
3
$keys = array ("cilinder", "carborateur", /* ... */);
foreach ($keys as $k)
    echo $k . ": " . $perso_array[$k];

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • reinhrst
  • Registratie: December 2003
  • Niet online
Verkeerde knopje.....

[ Voor 155% gewijzigd door reinhrst op 23-03-2004 15:19 ]

Claude


Acties:
  • 0 Henk 'm!

Verwijderd

.oisyn schreef op 23 maart 2004 @ 15:17:
Een switch is alleen handig als je 1 expressie wilt testen op verschillende uitkomsten, en is hier dus totaal niet van belang. Maar waarom definieer je je volgorde niet gewoon als een array?

PHP:
1
2
3
$keys = array ("cilinder", "carborateur", /* ... */);
foreach ($keys as $k)
    echo $k . ": " . $perso_array[$k];
Waarom dan niet zo:
PHP:
1
2
3
4
5
6
7
8
$perso_array = mysql_fetch_array($db_result);
foreach($perso_array as $key => $value)
{
  if( !empty($value) )
   {
      echo $key. ' is ' .$perso_array[$key];
   }
}

[ Voor 5% gewijzigd door Verwijderd op 23-03-2004 15:22 ]


Acties:
  • 0 Henk 'm!

  • sebas
  • Registratie: April 2000
  • Laatst online: 03-09 12:51
Doe gewoon de SELECT in de goede volgorde, en niet met een wildcard, dan kun je gemakkelijk je eerste oplossing gebruiken, en ben je klaar.

Everyone complains of his memory, no one of his judgement.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja, maar kan ik dan zelf een volgorde instellen?

Om het totale beeld maar even duidelijk te maken:
http://www.amicorpoject.nl/user.php?action=perso&do=view

Ik ben nu even het idee van oisyn aan het uitwerken want dat leek me een aantrekkelijk idee, aangezien ik dan mijn eigen volgorde kan instellen.
Want anders doet hij het toch op alfabet?

*edit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        $perso_array = mysql_fetch_array($perso_query);
        $sorteer_op = array(
                                'Cilinder',
                                'Carburateur',
                                'Uitlaat',
                                'Krukas',
                                'Luchtfilter'
                               )
        foreach($sorteer_op as $mijn_volgorde)
        {
                if(!empty($perso_array[$mijn_volgorde]) )
                {
                        echo $mijn_volgorde. '=' .$perso_array[$mijn_volgorde];
                }
        }

Zou dat dus wel werken? of niet? ziet er ideaal uit. Maar twijfel nog een klein beetje aan de werking. Overigens mijn excuses voor mijn nooberige php kennis..

[ Voor 79% gewijzigd door Verwijderd op 23-03-2004 15:36 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 23 maart 2004 @ 15:21:
[...]

Waarom dan niet zo:
PHP:
1
2
3
4
5
6
7
8
$perso_array = mysql_fetch_array($db_result);
foreach($perso_array as $key => $value)
{
  if( !empty($value) )
   {
      echo $key. ' is ' .$perso_array[$key];
   }
}
hierom:
Verwijderd schreef op 23 maart 2004 @ 15:08:
PHP:
1
2
3
4
5
6
7
8
$perso_array = mysql_fetch_array($db_result);
        foreach($perso_array as $waarde)
        {
                if(!empty($waarde) )
                {
                        echo "treu";
                }
        }

maar dit zou betekenen dat ik niet alles op eigen volgorde kan printen.
Alleen als ik een key opgeef..maar dan nog niet zoals ik het wil...
hij wilt dus z'n eigen volgorde kunnen specificeren

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 23 maart 2004 @ 15:27:
Want anders doet hij het toch op alfabet?
Nee, de volgorde waarin ze uit de db komen. Bij een SELECT * is dat dus de volgorde waarop jij je kolommen hebt gespecificeerd

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja maar dan zit ik nog met een probleem dat ik niet alles achter elkaar in een loop print..
Als je mijn template gezien hebt zal dat wel duidelijk worden. Dus zal het op de manier die ik net beschreven heb wel kunnen of niet?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ja, hoewel je variabel-naamgeving wel wat te wensen overlaat 8)7. Maar heej, het is jouw code :P ;)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja ook zo'n slechte eigenschap van mij, dus om het te leren..wat voor namen zou jij geven dan?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik gebruik sowieso engelse namen aangezien dat toch het best staat in code waarin je sowieso al gebruik maakt van engelse constructies (taal keywords en standaard functies)

Ten eerste gebruik je $sorteer_op. Als je niet weet wat erin staat, kun je dat dan uit de naam afleiden? Mijn inziens niet, het suggereert meer dat je de rijen op bepaalde kolomnamen sorteert (en dus niet de kolommen onderling). Maar wat is het dan wel? Je kent het een array met kolomnamen toe, dus zo zou ik 'm ook noemen: $columns (of op z'n Nederlands $kolommen, of andere synoniemen)

Verder de constructie "foreach($sorteer_op as $mijn_volgorde) "
$sorteer_op is natuurlijk een array, $mijn_volgorde is een element uit die array. Maar aan de namen is dat niet te zien. Wat dat betreft had $mijn_volgorde een betere naam geweest voor je array dan $sorteer_op, maar dat terzijde ;)
Aangezien je $sorteer_op al hernoemd had naar $kolommen zou ik die $mijn_volgorde ook een passende naam geven. Het is een element uit de array $kolommen, oftewel een kolom. Noem 'm dan ook zo: $kolom. Overigens betreft het hier een klein loopje met maar 1 statement erin, een afkorting voldoet in zo'n geval dan ook wel (het is aan de foreach erboven af te leiden wat ermee bedoelt wordt). Dus mijn inziens zou je ook $k kunnen gebruiken

$perso_array zelf is ook een beetje onduidelijk. Waar staat "perso" voor? Ik vermoed "persoon" of "personen", hoewel me dat een beetje vaag lijkt aangezien je dingen als cilinder en carburateur erin opslaat. Het gaat meer om een brommer, scooter, auto of ander gemotoriseerd voortuig. Maar goed, laten we maar even aannemen dat het om een persoon gaat die die dingen heeft. De array erachter doet in ieder geval vermoeden dat het om meerdere personen gaat, terwijl dat helemaal niet zo is. Ja, natuurlijk is $perso_array een array, maar het gaat maar om 1 persoon, dus ik zou 'm ook zo noemen: $persoon.

[ Voor 19% gewijzigd door .oisyn op 23-03-2004 17:11 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1