/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Tælle bogstaver?
Fra : Kasper Lund


Dato : 25-06-07 11:58

Hej ng.

Jeg henter noget data ud fra et overvågningssytem af en mysql db.


while($row = mysql_fetch_assoc($result)){

if ($row['service_description'] === "C:\\"){
$drev = $row['service_description'];
$fri = $row['plugin_output'];
$brugt = (100-$fri);
}

Ovenstående virker fint, men jeg ville gerne have en variable der hvor der
står "C:\\" - hvordan gør jeg det? Den skal tælle fa A-Z.

Et andet spørgsmål er hvordan jeg henter et tal ud fra en streng?

$row['service_description'] indeholder f.eks. teksten "10 procent ledig
plads" eller "Der er 10% ledig plads" jeg vil kun have fat i "10" hvordan
gør jeg det?

På forhånd tak for hjælpen.

/Kasper

 
 
Kasper Lund (25-06-2007)
Kommentar
Fra : Kasper Lund


Dato : 25-06-07 13:51

On Mon, 25 Jun 2007 10:57:51 +0000, Kasper Lund wrote:

> Hej ng.
>
> Jeg henter noget data ud fra et overvågningssytem af en mysql db.
>
>
> while($row = mysql_fetch_assoc($result)){
>
> if ($row['service_description'] === "C:\\"){
> $drev = $row['service_description'];
> $fri = $row['plugin_output'];
> $brugt = (100-$fri);
> }
>
> Ovenstående virker fint, men jeg ville gerne have en variable der hvor der
> står "C:\\" - hvordan gør jeg det? Den skal tælle fa A-Z.

Klarede den selv med følgende:

while($row = mysql_fetch_assoc($result)){

if (ereg(":",$row['service_description'])){
$drev = $row['service_description'];
$fri = $row['plugin_output'];
$brugt = (100-$fri);

Men jeg er dog stadig i tvivl om hvordan jeg henter tal ud fra en streng...

Bertel Lund Hansen (25-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 25-06-07 16:24

Kasper Lund skrev:

> Men jeg er dog stadig i tvivl om hvordan jeg henter tal ud fra en streng...

Denne her algoritme finder det første tal i strengen. "%d"
betyder at der ledes efter et heltal. "10.75" vil altså blive
læst som 10.

Hvis du skal bruge decimaltal, skal du bruge "%f" i stedet og
passe på med dansk/engelsk format.

Bemærk & foran $number i parentesen ved sscanf(). Det betyder at
det er en reference til en variabel, og sådan en kræves til
scanf().

   $streng="Der er 10% ledig plads";
   $pos=-1;
   while (!ctype_digit($streng[++$pos]));
   sscanf (substr($streng,$pos), "%d",&$number);

   echo $number;

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Jonas Delfs (25-06-2007)
Kommentar
Fra : Jonas Delfs


Dato : 25-06-07 16:29

Hej Kasper

Kasper Lund skrev:
> Et andet spørgsmål er hvordan jeg henter et tal ud fra en streng?
>
> $row['service_description'] indeholder f.eks. teksten "10 procent ledig
> plads" eller "Der er 10% ledig plads" jeg vil kun have fat i "10" hvordan
> gør jeg det?

Hvis du type caster en streng med et tal i som en integer, skulle du
gerne få tallet ud. Dvs:

$tal = (int)"her har du 10 kr til snoller."; // $tal har nu værdien 10

Alternativt kan man til den slags bruge regulære udtryk, se
http://php.net/preg_match

Mvh. Jonas

Bertel Lund Hansen (25-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 25-06-07 17:03

Jonas Delfs skrev:

> $tal = (int)"her har du 10 kr til snoller."; // $tal har nu værdien 10

Ikke når jeg tester det.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Jonas Delfs (25-06-2007)
Kommentar
Fra : Jonas Delfs


Dato : 25-06-07 18:39

Bertel Lund Hansen skrev:
> Jonas Delfs skrev:
>
>> $tal = (int)"her har du 10 kr til snoller."; // $tal har nu værdien 10
>
> Ikke når jeg tester det.

Du har ret - der var jeg for hurtig. Det gælder selvfølgelig kun når
tallet er det første i strengen, så det er jo ikke rigtig en løsning her.
Så ville jeg nok gøre som følger:

$bar = "her du, 10 kr til slik.";

preg_match('/[0-9]+/', $bar, $matches);
$tal = $matches[0];

ELLER

$tal = preg_replace('/[^0-9]+/','', $bar);

Mvh. Jonas

Bertel Lund Hansen (25-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 25-06-07 19:41

Jonas Delfs skrev:

> $bar = "her du, 10 kr til slik.";

Med strengen

       $streng="Der er 10% ledig plads";

Tog jeg tid på de tre metoder (1 mio. gentagelser af hver):

Det gav:

Metode 1 (mit forslag, dog med "%f")
10.75
Tid: 25

Metode 2
10
Tid: 17

Metode 3
1075
Tid: 16


--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Bertel Lund Hansen (25-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 25-06-07 20:14

Bertel Lund Hansen skrev:

>        $streng="Der er 10% ledig plads";

Smutter. Det var

       $streng="Der er 10.75% ledig plads";

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Jonas Delfs (25-06-2007)
Kommentar
Fra : Jonas Delfs


Dato : 25-06-07 20:32

Bertel Lund Hansen skrev:
> Bertel Lund Hansen skrev:
>
>>        $streng="Der er 10% ledig plads";
>
> Smutter. Det var
>
>        $streng="Der er 10.75% ledig plads";

Ja så giver dine benchmarks i hvert fald bedre - omend stadig meget lidt
- mening. (hastighedsforskelle i sådan en størrelsesorden giver så godt
som ingen mening imo. med mindre man rent faktisk udfører det 1M gange)

Og hvis der rent faktisk kan forekomme decimaler på procenterne, selvom
spørger aldrig har antydet det, skal mønstret i preg_* funktionerne
selvfølgelig rettes til. Så kan du jo teste løs igen.

Mvh. Jonas

Bertel Lund Hansen (25-06-2007)
Kommentar
Fra : Bertel Lund Hansen


Dato : 25-06-07 21:58

Jonas Delfs skrev:

> Ja så giver dine benchmarks i hvert fald bedre - omend stadig meget lidt
> - mening. (hastighedsforskelle i sådan en størrelsesorden giver så godt
> som ingen mening imo. med mindre man rent faktisk udfører det 1M gange)

Jeg er helt enig. Det primære krav er letlæselig kode. Det er da
også meget sjældent at jeg laver tidsmålinger. Jeg gjorde det
denne gang fordi manualen skriver at funktioner med regulære
udtryk tager tid.

> selvfølgelig rettes til. Så kan du jo teste løs igen.

Næ nej. Så interessant er det heller ikke.

--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste