/ 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
Type Casting
Fra : Christian Doeleman


Dato : 15-06-01 15:07

Jeg prøver vha. en regular expression at konvertere en streng indeholdende
nogle centimetermål til tommer.

Jeg har prøvet følgende:
<?php
$string = "Width: 43 cm x Height: 60 cm x Depth: 5cm";

$pattern = "([[:alnum:]]+)[[:space:]]*cm";
// ét eller flere tal, evt. fulgt af et mellemrum, efterfulgt af 'cm'

$cm = "\\1";
$inch = $cm / 2.54;
$replace = "$inch in.";

print ereg_replace($pattern,$replace,$string);
?>

Skulle PHP ikke automatisk lade $cm skifte fra en string til double?

Hvis jeg eksplicit sætter $cm til double, vha. settype() bliver værdien blot
0. Hvis jeg undlader at udføre divisionen virker scriptet fint, blot bliver
værdierne ikke omregnet.

Hvad gør jeg galt?

Med venlig hilsen

Christian



 
 
Niels (15-06-2001)
Kommentar
Fra : Niels


Dato : 15-06-01 19:49

Just as I expected, Christian Doeleman came up with this:

>$cm = "\\1";
>$inch = $cm / 2.54;

Her omregner PHP $cm til et tal (det bliver til en float), det tal
bliver så enten 0 (kan ikke lade sig gøre), eller også bliver det 1 (den
smider backslashen væk).

>$replace = "$inch in.";

Bliver derfor cirka til:
$replace = "0.39370078 in.";
(1 delt med 2.54)

>print ereg_replace($pattern,$replace,$string);

Hvis nu ereg_replace kunne håndtere matematiske udtryk kunne du gøre
det, men her erstatter du bare alle mål i cm med "0.39370038 in.".

>?>

Niels
--
http://www.niller.f2s.com/ - niLLer's pages, that's my software
http://g4s.dnsq.org/ - when I'm online
g4s ad post dot ocm - new email! (note: it's .com !)
ICQ#: 50187323

Christian Doeleman (15-06-2001)
Kommentar
Fra : Christian Doeleman


Dato : 15-06-01 23:56

"Niels" <nmartin@ispam.com> skrev:

> >$cm = "\\1";
> >$inch = $cm / 2.54;
>
> Her omregner PHP $cm til et tal (det bliver til en float), det tal
> bliver så enten 0 (kan ikke lade sig gøre), eller også bliver det 1 (den
> smider backslashen væk).

Hvorfor skulle PHP smide backslashene væk? //1 henviser til den gemte værdi,
dvs. tallene i strengen. Hvis jeg undlader, at udføre divisionen i linie 8
bliver værdierne overført som de skal, blot bliver udregningen ikke udført.

Resultatet bliver da: Width: 43 in. x Height: 60 in. x Depth: 5 in.

Kan det ikke lade sig gøre, at lave udregningen? Hvordan kan problemet løses
alternativt?

Med venlig hilsen

Christian



Niels (16-06-2001)
Kommentar
Fra : Niels


Dato : 16-06-01 18:49

Just as I expected, Christian Doeleman came up with this:

>> >$cm = "\\1";
>> >$inch = $cm / 2.54;
>>
>> Her omregner PHP $cm til et tal (det bliver til en float), det tal
>> bliver så enten 0 (kan ikke lade sig gøre), eller også bliver det 1 (den
>> smider backslashen væk).
>
>Hvorfor skulle PHP smide backslashene væk? //1 henviser til den gemte værdi,
>dvs. tallene i strengen.

Ja, den henviser til den gemte værdi når den kommer gennem
ereg_replace() !!

>Hvis jeg undlader, at udføre divisionen i linie 8
>bliver værdierne overført som de skal, blot bliver udregningen ikke udført.

Det er korrekt, for ved divisionen konverterer PHP din string '\1' til
et tal den kan dividere med. Bemærk at '\1' endnu ikke henviser til
noget som helst.

>Kan det ikke lade sig gøre, at lave udregningen? Hvordan kan problemet løses
>alternativt?

Du trækker først de oprindelige tal ud, så regner du på dem og til
sidste putter du tallene ind igen.
Jeg vil tro du skal gøre noget lignende:

find første match
loop indtil ikke flere matches
overfør al tekst mellem start og match-position fra input til output
slet overført tekst fra input
udtræk målet i cm uden benævnelse
slet målet i cm med benævnelse fra input
beregn målet i inches
skriv målet i inches til output
skriv enheden ("in") til output
find næste match
slut loop

Niels
--
http://www.niller.f2s.com/ - niLLer's pages, that's my software
http://g4s.dnsq.org/ - when I'm online
g4s ad post dot ocm - new email! (note: it's .com !)
ICQ#: 50187323

Henrik Christensen (17-06-2001)
Kommentar
Fra : Henrik Christensen


Dato : 17-06-01 08:11

> Kan det ikke lade sig gøre, at lave udregningen? Hvordan kan problemet
løses
> alternativt?

Du kan måske gøre sådan her.

<?php
$text="Width: 43 cm x Height: 60 cm x Depth: 5 cm";
$temp=explode(":",$text);
$width=round($temp[1]/2.54,2);
$height=round($temp[2]/2.54,2);
$depth=round($temp[3]/2.54,2);
echo "Width: $width inch x Height: $height inch x Depth: $depth inch";
?>

PS. Jeg er total nybegynder med PHP.
Så det er måske forkert at gøre det sådan,
men det virker på min egen test server.




Christian Doeleman (18-06-2001)
Kommentar
Fra : Christian Doeleman


Dato : 18-06-01 14:41

"Henrik Christensen" <hc-mail@post.cybercity.dk> skrev:
> Du kan måske gøre sådan her.
>
> <?php
> $text="Width: 43 cm x Height: 60 cm x Depth: 5 cm";
> $temp=explode(":",$text);
> $width=round($temp[1]/2.54,2);
> $height=round($temp[2]/2.54,2);
> $depth=round($temp[3]/2.54,2);
> echo "Width: $width inch x Height: $height inch x Depth: $depth inch";
> ?>
>
> Så det er måske forkert at gøre det sådan,
> men det virker på min egen test server.

Det virker også på min server...

Tak for tippet,

Med venlig hilsen
Christian



Søg
Reklame
Statistik
Spørgsmål : 177507
Tips : 31968
Nyheder : 719565
Indlæg : 6408569
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste