[PHP] reeks binnen een switch

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zoek me een ongeluk maar ik kom er niet uit. Ik wil een switch maken die in de eerste case bekijkt of de inhoud van een variable tussen de 0 en de 9 is. Bij de tweede case moet ie dan kijken of de inhoud tussen de 10 en de 19 is.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
switch ($_GET[$variable])
{
default:
  $new_variable="a";
break;
case (0 t/m 9):
  $new_variable="b";
break;
case (10 t/m 19):
  $new_variable="c";
break;
}
?>


Okay, waar "0 t/m 9" en "10 t/m 19" staat daar kom ik er dus niet uit. Hoe doe ik dat?

[ Voor 17% gewijzigd door Verwijderd op 01-04-2004 08:36 ]


Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
even zoeken met google :?

op http://nl3.php.net/switch staat een hoop beschreven

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
switch (true)
{
default:
  $new_variable="a";
break;
case ($_GET[$variable] >-1 && $_GET[$variable] <10):
  $new_variable="b";
break;
case ($_GET[$variable] >9 && $_GET[$variable] <20):
  $new_variable="c";
break;
}


Zoiets?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanks beetle71, dat was precies wat ik zocht!

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Wat mij betreft is het nut van de switch wel een beetje verdwenen nu; waarom zou je nu geen for loopje gebruiken?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Mja, als je het op die manier doet heeft een switch niet zo veel meerwaarde boven een if/elseif/else of wel?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het gaat om een switch met 10 reeksen. 0-9, 10-19, etc. t/m 90-99. Zou het nog simpeler kunnen dan?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Mja, als het om zo'n soort reeks gaat kun je inderdaad beter een for-loop gebruiken.
http://nl3.php.net/for

riekt toch naar basiskennis PHP (en programmeren in het algemeen), hoor, dit

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Wat je ook nog zou kunnen doen

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch($_GET['variable']){
  case 0:
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
  case 6:
  case 7:
  case 8:
  case 9:
  case 10:
    Hier_je_code();
    break;
  case 11:
  case 12:
  ...

Kan je later ook nog reeksen toevoegen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt allemaal, beetle71 had het juiste stukje code voor mijn doel:
code:
1
$_GET[$variable] >-1 && $_GET[$variable] <10

Ik zie nu dat het hier om ging, het doet precies wat ik nodig heb. Ik ben misschien geen geweldige programmeur en aan mijn basiskennis ontbreekt het wellicht maar ben wel een doorbijter en ik kom daar wel (met een beetje hulp van jullie ;) ).

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Verwijderd schreef op 31 maart 2004 @ 17:40:
Bedankt allemaal, beetle71 had het juiste stukje code voor mijn doel:
code:
1
$_GET[$variable] >=1 && $_GET[$variable] <10

Ik zie nu dat het hier om ging, het doet precies wat ik nodig heb. Ik ben misschien geen geweldige programmeur en aan mijn basiskennis ontbreekt het wellicht maar ben wel een doorbijter en ik kom daar wel (met een beetje hulp van jullie ;) ).
Als je het op deze manier doet, schiet je niet voorbij het doel/nut van een switch, en kun je beter een if gebruiken. De manier van Dutch_Wolf is de 'politiek correcte' manier ;)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
btw, een default zet je doorgaans onderaan je cases.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ PrisonerOfPain:
Schiet ik niet of wel voorbij aan het doel van een switch en waarom? De switch die ik nu hebt gemaakt heeft tien cases met ieder een reeks van 10. Het werkt en het ziet er overzichtelijk uit en daar is ook wat voor te zeggen toch? Ik gebruik
code:
1
$_GET[$variable] >-1 && $_GET[$variable] <10
nu ook in een if omdat dat daar erg handig is. Maar voor het initiele doel lijkt me een switch tot nu toe toch het beste.

Op zich kan ik me wel vinden in Dutch_Wolf's 'politiek correcte' manier. Is die manier ook lichter voor een server om uit te voeren (aangezien dit bij elke view/refresh uitgevoerd gaat worden)? Zo te zien hoeft php niet te kijken of iets tussen x en y inzit en loopt ie iets na tot het gevonden is en voor opvolgende code na. Lijkt dus sneller?

@ Grijze Vos:
Yep, je hebt gelijk en ik weet het, ik tikte het ff uit de losse pols.

@ drm:
Ik heb je link naar php.net even volledig doorgelezen maar vond niet 123 iets bruikbaars, maar ik zal me erin verdiepen want ik merk dat ik behoefte heb aan meer kennis.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Ik vind die methode van dutch_wolf al helemaal niets eerlijk gezegd in dit geval. Het kost je een regel of 100 en het beidt geen enkele meerwaarde. Het is wel nuttig als je met bijvoorbeeld meerdere string wilt vergelijken en indien het waar is je hetzelfde wilt doen. Voor getallen hebben we gewoon speciale operatoren, gebruik daarvan is toegestaan :)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
//getest, zomaar een ideetje
$stapgrootte=10;
$limiet=100;
$getal=24;
$start=1;

$ranges['1_10']='a';
$ranges['11_20']='b';
$ranges['21_30']='c';

while($start<$limiet){
  if($getal>=$start AND $getal<$start+$stapgrootte){
    echo 'range herkenning gelukt';
    echo '<br>start: '.$start;
    echo '<br>end: '.($start+$stapgrootte-1);
    echo '<br>range waarde: '.$ranges[$start.'_'.($start+$stapgrootte-1)];
    break;
  }
  $start=$start+$stapgrootte;
}
?>

[ Voor 95% gewijzigd door djluc op 31-03-2004 20:39 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Verwijderd schreef op 31 maart 2004 @ 20:12:
@ PrisonerOfPain:
Schiet ik niet of wel voorbij aan het doel van een switch en waarom?
Een switch gebruik je mijns inziens als je een variabele wilt controleren op verschillende waarde, niet om te kijken of een vergelijking true valideert, daar heb je if's voor.
De switch die ik nu hebt gemaakt heeft tien cases met ieder een reeks van 10. Het werkt en het ziet er overzichtelijk uit en daar is ook wat voor te zeggen toch? Ik gebruik
code:
1
$_GET[$variable] >-1 && $_GET[$variable] <10
nu ook in een if omdat dat daar erg handig is. Maar voor het initiele doel lijkt me een switch tot nu toe toch het beste.
Want?
Op zich kan ik me wel vinden in Dutch_Wolf's 'politiek correcte' manier. Is die manier ook lichter voor een server om uit te voeren (aangezien dit bij elke view/refresh uitgevoerd gaat worden)? Zo te zien hoeft php niet te kijken of iets tussen x en y inzit en loopt ie iets na tot het gevonden is en voor opvolgende code na. Lijkt dus sneller?
Geen idee, maak een testcase anders ;)
PS. intern word een switch in php naar een if omgetovert, het lijkt me dus sneller om dat meteen al een if te nemen.
djluc schreef op 31 maart 2004 @ 20:17:
Ik vind die methode van dutch_wolf al helemaal niets eerlijk gezegd in dit geval. Het kost je een regel of 100 en het beidt geen enkele meerwaarde. Het is wel nuttig als je met bijvoorbeeld meerdere string wilt vergelijken en indien het waar is je hetzelfde wilt doen. Voor getallen hebben we gewoon speciale operatoren, gebruik daarvan is toegestaan :)
Als je het perse met een switch wilt doen is dat de correcte manier, ik zou in dit geval gewoon een if hebben gekozen.

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 31 maart 2004 @ 17:14:
Thanks beetle71, dat was precies wat ik zocht!
zoek het voortaan op www.php.net aub

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!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Als je het perse met een switch wilt doen is dat de correcte manier, ik zou in dit geval gewoon een if hebben gekozen.
Ik wil het ook niet met een switch doen, zoals ik ook schreef is die veel handiger voor strings, maar hier niet voor. Zie daarom ook mijn lusje, geen for lusje vandaag helaas DRM. :)

Acties:
  • 0 Henk 'm!

Verwijderd

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
switch($_GET['variable'] % 10)
{case 0:
    $new_variable='b';
    break;
  case 1:
    break;
  case 2:
    break;
  case 3:
    break;
  case 4:
    break;
  case 5:
    break;
  case 6:
    break;
  case 7:
    break;
  case 8:
    break;
  case 9:
    break;
  default:
    $new_variable='a';
    break;
}

[ Voor 34% gewijzigd door Verwijderd op 31-03-2004 21:41 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Interessante benadering sinaasappelsap, maar werkt het inderdaad zo? 12 modulo 2 geeft toch 2? En 22 modulo 2 toch ook, of heb ik het nog niet helemaal goed begrepen? Even getest en zo werkt het inderdaad. Dus hoe wil je dit met die 10 groepen precies op gaan lossen?

[ Voor 24% gewijzigd door djluc op 31-03-2004 22:04 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Reacties ope een paar reacties op mijn methode:
Ik weet dat het erg omslactig is, en als ik de exacte situatie had geweten had ik het waarschijnlijk ook anders gedaan, maar dit was het eerste wat bij mij opkwam. En inderdaad im dit geval is het simepeler een if te maken,

Een ander mogelijkheid volgens mij is iets als
PHP:
1
2
3
4
5
6
7
 for($i=0;$i<10;$i++){
  $lower= $i*10;
  $uper= $lower+10;
  if($check>$lower && $check<$upper){
   doe_iets($upper,$lower,$i);
  }
 }

Dit is niet getest!!

Acties:
  • 0 Henk 'm!

Verwijderd

djluc schreef op 31 maart 2004 @ 22:02:
Interessante benadering sinaasappelsap, maar werkt het inderdaad zo? 12 modulo 2 geeft toch 2? En 22 modulo 2 toch ook, of heb ik het nog niet helemaal goed begrepen? Even getest en zo werkt het inderdaad. Dus hoe wil je dit met die 10 groepen precies op gaan lossen?
Dat moet natuurlijk "die andere" zijn. Dus niet de mod, maar de div. Hoe ging dat ook alweer in PHP?

In ieder geval is het principe: Delen door tien en de rest weggooien / afronden naar beneden.

Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Dat zou dan worden:
PHP:
1
switch(floor($_GET['variable'] / 10))

[ Voor 19% gewijzigd door MatHack op 31-03-2004 22:43 ]

There's no place like 127.0.0.1


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
function check($int)
{
    $step=0;
    for($i=$int;$i>9;$i-=10)
      $step++;
    return ($step*10) . '-' . ($step*10+9);
}

echo check(1587);
Pagina: 1