Toon posts:

[php] veel scripts verkorten

Pagina: 1
Acties:
  • 39 views sinds 30-01-2008

Verwijderd

Topicstarter
dit lap script lijkt mij behoorlijk overdreven, kan het wat korter? volgens mij wel, maar ik zou niet weten hoe:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  $aantalcd = $result - $result3; 

  //aantal games in database 
  if($result != 1){ 

    if($result3 != 1){ 

      if($aantalcd != 1){ 

      echo "Er zijn in totaal $result games ingevoerd, waaronder $result3 DVD-games en $aantalcd CD-games!"; 

      } else { 

      echo "Er zijn in totaal $result games ingevoerd, waaronder $result3 DVD-games en $aantalcd CD-game!"; 

      } 

    } else { 

      if($aantalcd != 1){ 

      echo "Er zijn in totaal $result games ingevoerd, waaronder $result3 DVD-game en $aantalcd CD-games!"; 

      } else { 

      echo "Er zijn in totaal $result games ingevoerd, waaronder $result3 DVD-game en $aantalcd CD-game!"; 

      } 

    } 

  } else { 

    if($result3 != 1){ 

      if($aantalcd != 1){ 

      echo "Er is in totaal $result game ingevoerd, waaronder $result3 DVD-games en $aantalcd CD-games!"; 

      } else { 

      echo "Er is in totaal $result game ingevoerd, waaronder $result3 DVD-games en $aantalcd CD-game!"; 

      } 

    } else { 

      if($aantalcd != 1){ 

      echo "Er is in totaal $result game ingevoerd, waaronder $result3 DVD-game en $aantalcd CD-games!"; 

      } else { 

      echo "Er is in totaal $result game ingevoerd, waaronder $result3 DVD-game en $aantalcd CD-game!"; 

      } 

    } 

  }

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
PHP:
1
  if($result != 1 && $result3 != 1 && $aantalcd != 1){

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Verwijderd schreef op 20 maart 2004 @ 16:26:
dit lap script lijkt mij behoorlijk overdreven. Klopt.
PHP:
1
2
3
4
5
6
$aantalcd = $result - $result3; 
  if($aantalcd != 1){ 
    echo "Er zijn in totaal $result games ingevoerd, waaronder $result3 DVD-game(s) en $aantalcd CD-game(s)!"; 
  } else { 
    echo "Er zijn in totaal $result games ingevoerd, waaronder $result3 DVD-game(s) en $aantalcd CD-game(s)!"; 
  }

[ Voor 4% gewijzigd door X-Lars op 20-03-2004 16:32 ]


Verwijderd

Topicstarter
huh stel dat $result 1 is dan moet het niet games zijn :P maar game

edit: niet opgelet (s).. kan ook maar ik heb liever de correcte taal :P 8)7

[ Voor 47% gewijzigd door Verwijderd op 20-03-2004 16:35 ]


  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

ok, maak dan van zijn is/zijn en van games game(s). het is een beetje overdreven allemaal wat jij wilt, je kunt ook aparte variabelen voor het woord game of games gaan gebruiken, maar is dit nou zo belangrijk?!

Verwijderd

Here you go:

PHP:
1
2
3
4
5
6
7
8
9
10
<?

    $GameTotNum = 10;
    $GameDvdNum = 4;
    $GameCdNum  = $GameTotNum - $GameDvdNum;
    
    echo "Er " . ($GameTotNum == 1 ? "is" : "zijn") . " in totaal " . $GameTotNum . ($GameTotNum == 1 ? " game" : " games") . " ingevoerd, ";
    echo "waaronder " . $GameDvdNum . ($GameDvdNum == 1 ? " DVD-game" : " DVD-games") . " en " . $GameCdNum . ($GameCdNum == 1 ? " CD-game" : " CD-games") . "!";

?>


Voor de rest is het heel ranzig om result1 te gebruiken, maar benoem je variabelen zodat je over een half jaar nog weet wat je er mee kunt etc.

Ik schrijf nu ook het if-statement op 1 regel, dit moet je niet te vaak gebruiken, omdat het de leesbaarheid niet ten goede komt, maar binnen een echo kan het wel vind ik.

[ Voor 60% gewijzigd door Verwijderd op 20-03-2004 16:52 . Reden: uitleg if statement, en stomme fout eruit ghaald, thanks X-Lars ]


  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Ja nou doe ik even irritant: bij 0 cd's? Dus draai het even om, als voorbeeld de eerste:
code:
1
($GameTotNum == 1 ? "is" : "zijn")

[ Voor 27% gewijzigd door X-Lars op 20-03-2004 16:49 ]


Verwijderd

Topicstarter
Verwijderd schreef op 20 maart 2004 @ 16:43:
Here you go:

PHP:
1
2
3
4
5
6
7
8
9
10
<?

    $GameTotNum = 10;
    $GameDvdNum = 4;
    $GameCdNum  = $GameTotNum - $GameDvdNum;
    
    echo "Er " . ($GameTotNum == 1 ? "is" : "zijn") . " in totaal " . $GameTotNum . ($GameTotNum == 1 ? " game" : " games") . " ingevoerd, ";
    echo "waaronder " . $GameDvdNum . ($GameDvdNum == 1 ? " DVD-game" : " DVD-games") . " en " . $GameCdNum . ($GameCdNum == 1 ? " CD-game" : " CD-games") . "!";

?>


Voor de rest is het heel ranzig om result1 te gebruiken, maar benoem je variabelen zodat je over een half jaar nog weet wat je er mee kunt etc.

Ik schrijf nu ook het if-statement op 1 regel, dit moet je niet te vaak gebruiken, omdat het de leesbaarheid niet ten goede komt, maar binnen een echo kan het wel vind ik.
mooi stukje script, ook wel slim.. maar hoezo die 4 en 10?

Verwijderd

Test het script eens en verander die waardes?

Verwijderd

Topicstarter
't werkt :)
PHP:
1
2
3
4
  $aantalcd = $result - $result3;

  echo "Er " . ($result == 1 ? "is" : "zijn") . " in totaal " . $result . ($result == 1 ? " game" : " games") . " ingevoerd, "; 
  echo "waaronder " . $result3 . ($result3 == 1 ? " DVD-game" : " DVD-games") . " en " . $aantalcd . ($aantalcd == 1 ? " CD-game" : " CD-games") . "!";


bedankt!

[ Voor 26% gewijzigd door Verwijderd op 20-03-2004 17:06 ]


Verwijderd

Graag gedaan, maar vergeet niet dat ik niet aan $result3 kan zien dat dat het aantal dvd's zijn. Probeer je variabel namen goed uit te kiezen.

Verwijderd

Topicstarter
oke ook goed id hehe ik ga de $result variabelen etc.. een goede naam geven, het is trouwens een enorme lap script.. zien?
http://www.phpfreakz.nl/library.php?sid=13506...

Verwijderd

Gebruik in zulke gevallen voortaan printf.
Jij concateneert eerst alle delen van de string, en dan pas echo je de output.
Echo gebruiken i.c.m. komma's i.p.v. punten is ook een oplossing, maar printf biedt in zulke gevallen meer voordelen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
   printf ( 'Er %s in totaal %u %s ingevoerd, waaronder %u %s en %u %s!',
      ( $result == 1 ? 'is' : 'zijn' ),
      $result,
      ( $result == 1 ? 'game' : 'games' ),
      $result3,
      ($result3 == 1 ? 'DVD-game' : 'DVD-games' ),
      $aantalcd,
      ($aantalcd == 1 ? 'CD-game' : 'CD-games' )
   );
?>

Beter nog (imho):
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
   printf ( 'Er %s in totaal %u %s ingevoerd, waaronder %u %s en %u %s!',
      plural ( 'is', 'zijn', $result ),
      $result,
      plural ( 'game', 'games', $result ),
      $result3,
      plural ( 'DVD-game', 'DVD-games', $result3 ),
      $aantalcd,
      plural ( 'CD-game', 'CD-games', $aantalcd )
   );
?>

En dan dus even een simpele functie schrijven die de logica verder doet. En idd, 'plural' is niet zo'n handige naam voor die functie, maar ik wist even niets beters.

[edit]
En nog beter:
Beter nog (imho):
PHP:
1
2
3
4
5
6
7
8
<?php
   printf ( 'Er %s in totaal %s ingevoerd, waaronder %s en %s!',
      plural ( 'is', 'zijn', $result, false ),
      plural ( 'game', 'games', $result, true ),
      plural ( 'DVD-game', 'DVD-games', $result3, true ),
      plural ( 'CD-game', 'CD-games', $aantalcd, true )
   );
?>

Met dus een functie die kijkt of iets enkelvoud of meervoud moet zijn, en die het aantal er eventueel voor zet of niet.
PHP:
1
2
3
4
5
6
7
function plural ( $singular, $plural, $number, $include_number = false ) {
   if ( $include_number ) {
      return sprintf ( '%u %s', $number, ( $number == 1 ) ? $sungular : $plural );
   } else {
      return ( $number == 1 ) ? $sungular : $plural;
   }
}

(niet getest)

[ Voor 59% gewijzigd door Verwijderd op 20-03-2004 17:26 ]


Verwijderd

Topicstarter
ik snap er niks van, ook niet wat %s en %u inhoudt :9 8)7

tell me wat het is _/-\o_

edit: hum hum dit lijkt me veel te ingewikkeld, ik hou wel het simpel zo van die andere manier van sheeponfire :) die snap ik tenministe wel :P

[ Voor 48% gewijzigd door Verwijderd op 20-03-2004 17:28 ]


  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

come on... php.net

Verwijderd

Dat zijn een soort rgereserveerde plaatsen waarin een variabele gestopt kan worden.
%s is voor een string, %u is voor een positief geheel getal.

Voorbeeld:
printf ( 'Er staan %u %s in de wei', 15, 'koeien' );

Dit levert dus:
Er staan 15 koeien in de wei

Voor de rest kun je vanalles vinden in de php manual.

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 07-04 13:41
Waarom een aparte functie voor de logica, is dat niet dubbel op?

Verwijderd

Het ziet er clean uit met de plural functie, maar met die extra functie is de parse tijd wel bijna twee keer zo lang. Als je 10 regeltjes moet parsen geen probleem, maar bij duizenden records al iets meer.

Verwijderd

Topicstarter
dan kies ik de korste parse tijd, dus de simpelste manier :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 20 maart 2004 @ 16:26:
dit lap script lijkt mij behoorlijk overdreven, kan het wat korter? volgens mij wel, maar ik zou niet weten hoe:
Dan moet je eens wat zelf gaan proberen en aanpakken, wij zijn niet de 'debug-my-code'-service van het internet.

Lees even P&W FAQ - De "quickstart" en
P&W FAQ - Het FAQ/Beleid topic :)

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.