← Back to team overview

sslug-teknik team mailing list archive

Re: MySQL sp��l

 

Det er to forskellige situationer:

Den første vi talte om, SingPlurText, er tilfældet, hvor du med funktionen
har en enkel måde at udskrive data i enten ental eller flertal ("1 artikel"
vs. f.eks. "3 artikler"), helt automatisk. Du kalder bare funktionen, og den
kan kaldes med andet end blot "artikel" og "artikler". Du kan f.eks. bruge
funktionen, hvis du et sted i din applikationen har fundet et antal
forfattere, men koden ikke ved hvor mange, og du skal skrive det ud
grammatisk korrekt. Det bliver så:

echo (SingPlurText (mysql_num_rows($foresp), "forfatter", "forfattere"));

Du fortæller altså funktionen 3 ting: 1) Hvor mange rækker (forfattere,
artikler o.s.v.) der er fundet, 2) hvad det hedder i ental (hvis der kun er
fundet 1 af slagsen), og 3) hvad det hedder i flertal (hvis der er fundet 0
eller flere).

Den anden situation du bringer frem, er tilfældet hvor du skal afgøre om der
skal skrives noget efter overskriften eller ej, afhængig af om
$data["Forfatter"] er tom. Her har du - ligesom i det første tilfælde - 2
muligheder: 1) Enten skriver du koden "inline" for hver gang du har brug for
den, eller 2) du kan lave en funktion, der kan kaldes overalt. Det kunne
f.eks. se sådan ud (forenklet for at fremhæve det vigtige):

1) Inline:
echo ($data["Overskrift"].(empty($data["Forfatter"]) ? "" : " af
".$data["Forfatter"]));

2) Funktion:
echo ($data["Overskrift"].NothingOrEverything($data["Forfatter"], " af
".$data["Forfatter"]));

function NothingOrEverything ($data, $output_string) {
    if (empty ($data))
        return ("");
    else
        return ($output_string);
}

eller

function NothingOrEverything ($data, $output_string) {
    return (empty ($data) ? "" : $output_string);
}

Funktionsnavnet er her generisk (men måske ikke det mest sigende valg),
hvilket lægger op til, at du kan bruge det til andet end blot i
"forfatter"-situationen.

Joachim



"Birger Langkjer" <blangkjer@xxxxxxxxxxx> wrote in message
news:bqrbdi$lom$1@xxxxxxxxxxxx...
> Hvad gør man hvis "$num" skal være en tekststreng:
>
> while ($data = mysql_fetch_array($foresp)) {
>  echo "<p><a
> href='artikel_visning.php?artikel=$data[ArtikelID]'>$data[Overskrift]</a>
af
> " . $data[Forfatter];
>  }
>
> og nogle af artikler ikke har noget forfatternavn, dvs. $data[Forfatter]
er
> tom?
> Jeg har prøvet med:
>
> SingPlurText ($data[Forfatter], " af ", " ")
>
> function TwoTextString ($string, $text_one, $text_two) {
>      if ($string <> 0)
>       return ($text_one . $string);
>     else
>         return ($text_two . $string);
>
> Jeg har sikkert ikke forstået, hvad det går ud på...
>
>
>
>
> "Joachim Bondo" <joachim@xxxxxxxxx> skrev i en meddelelse
> news:bqr8in$6q0$1@xxxxxxxxxxxx...
> >
> > "Birger Langkjer" <blangkjer@xxxxxxxxxxx> wrote in message
> > news:bqqrs6$307$1@xxxxxxxxxxxx...
> > [snip]
> > > > function SingPlurText ($num, $sing_text, $plur_text) {
> > > >     if ($num == 1)
> > > >         return ("1 ".$sing_text);
> > > >     else
> > > >         return ($num." ".$plur_text);
> > > > }
> > [snip]
> > > Jeg havde tænkt mig at lave:
> > >
> > > if ( mysql_num_rows($foresp) <> 1 ) {
> > >  $antal_artikler = "artikler";
> > >  } else {
> > >  $antal_artikler = "artikel";
> > >  }
> > >
> > > echo mysql_num_rows($foresp) . " " . $antal_artikler . " osv.</p>";
> > >
> > > er der nogen fordele ved at bruge din løsning?
> >
> > Resultater er det samme. Fordelene, sådan som jeg ser det, ved at bruge
> > funktionen er, at du kan kalde den flere steder fra, og at din kode
bliver
> > enklere, mere læsbar og mere overskuelig. Men det er lige så meget et
> > spørgsmål om kodestil og -smag.
> >
> > Joachim
> >
> >
> >
> >
>
>
>
>




References