Avatar billede michaeltryl Seniormester
06. februar 2007 - 19:22 Der er 19 kommentarer og
1 løsning

proble med at splitte streng

jeg har følgende

echo"<br>$ny_penge<br>";

$tekst = strrev($ny_penge);
$ny_bronze = (int)($tekst[0]);
$ny_solv = (int)($tekst[1]);
$ny_guld = (int)($tekst[2]);
$ny_seddel = (int)($tekst[3]);

og det virker fint hvis jeg har et tal mellem 0 og 9999, men i det øjeblik tallet er f.eks mellem 10000 og 99999 giver det problemer.
Hvis tallet er f.eks 11637
skal den splettes sådan

$ny_bronze = 7;
$ny_solv = 3
$ny_guld = 6;
$ny_seddel = 11;

lige nu vil $ny seddel være = 1. Jeg kan sagtens se det logiske i at det sker, men kan ikke regne ud hvordan jeg får den spillet rigtig. problemet er jo det samme fra 100.000 og 1.000.000 osv.
$ny_bronze skal altid være = ener pladsen
$ny_solv = skal altid være = tier pladsen
$ny_guld = skal altid være = 100 pladsen
$ny_seddel = skal altid være = de pladser der er tilbage

håber meget det kan lade sig gøre
Avatar billede jakobdo Ekspert
06. februar 2007 - 19:40 #1
Hvad med: $ny_seddel = (int)(substr($tekst,3));
Avatar billede erikjacobsen Ekspert
06. februar 2007 - 19:42 #2
Det er et besynderligt format du har valgt. Hvis nu der står "73612" oprindeligt, og du vender den om "21637", er der så 21 af typen seddel. Eller 12?

Hvad med at vælge et andet format, for at undgå bøvl, i fremtiden?
Avatar billede jakobdo Ekspert
06. februar 2007 - 19:48 #3
Som erikjacobsen er inde på, så kunne du overveje følgende løsning:

$mineData = array();

$mineData['bronze'] = 123;
$mineData['solv'] = 2;
$mineData['guld'] = 12;
$mineData['seddel'] = 4324;
Avatar billede michaeltryl Seniormester
06. februar 2007 - 20:06 #4
tal har jo det format så hvordan skal jeg kunne ændre det?Jeg vender igenting om tallet 11637 kan også stilles sådan op

$ny_seddel = 11;
$ny_guld = 6;
$ny_solv = 3
$ny_bronze = 7;

hvis tallet er 21637 skal ny_seddel være 21 og hvis tallet er 216378 skal ny_seddel være 216 osv.
hvis tallet er 216378 er opstillingen sådan
$ny_seddel = 216;
$ny_guld = 3;
$ny_solv = 7;
$ny_bronze = 8;

Jeg kan ikke lige se nogetr system i det sidste du har skrevet jakobdo.
Avatar billede erikjacobsen Ekspert
06. februar 2007 - 20:09 #5
"Jeg vender igenting om" ... hvad laver din  strrev($ny_penge);  så?
Det kan da være det slet ikke skal være et tal du har disse oplysninger i.
Avatar billede jakobdo Ekspert
06. februar 2007 - 20:12 #6
Hvorfor får du tallene på den måde du gør?
Hvor får du tallene fra?
Avatar billede michaeltryl Seniormester
06. februar 2007 - 20:16 #7
Ja okay jeg vender tallet, det var et script jeg fandt på nettet og havde ikke lige set at den vendte tallet om.
Hvad mener du med:
"Det kan da være det slet ikke skal være et tal du har disse oplysninger i."
Hvis det ikke skal være tal hvordan skal jeg så kunne lave udregninger med dem?
Avatar billede michaeltryl Seniormester
06. februar 2007 - 20:19 #8
Hvorfor får du tallene på den måde du gør?
På hvilken måde?
Jeg får tallet fra et simpelt plus stykke.
dette stykke bliver lavet efter der er lavet nogen udregninger på hvor mange minutter brugeren har været logget ind.
Avatar billede erikjacobsen Ekspert
06. februar 2007 - 20:19 #9
Du kan vel heller ikke regne med dem nu - altså lægge dem sammen og sådan noget. Men det afhænger da af hvad du skal have lavet, gemt, beregnet. Det skriger bare til himlen om problemer i fremtiden, sådan som det er nu.
Avatar billede michaeltryl Seniormester
06. februar 2007 - 20:26 #10
jeg gemmer dem i hver sit felt i en mysql databse af typen decimail

$ny_seddel bliver gemt i seddel
$ny_guld i guld
$ny_solv i solv
$ny_bronze i bronze

jeg kan sagtens gøre f.eks sådan

$plus = $ny_guld + $ny_solv;

echo"$plus"; udskriver så resultatet af det regnestykke
Avatar billede jakobdo Ekspert
06. februar 2007 - 20:27 #11
Hvorfor begynder du så at lægge alle tal sammen til en streng?
Avatar billede michaeltryl Seniormester
06. februar 2007 - 20:30 #12
fordi at f.eks 216378 er samlede antal minutter brugeren har været online og de minutter skal så splittes op i de mønt enheder
Avatar billede jakobdo Ekspert
06. februar 2007 - 20:35 #13
Er det så ikke nemmere at lave et regne stykke?
$minutter = 216378;
$ny_bronze = $minutter % 10;
$ny_solv = ($minutter-$ny_bronze) % 100;
osv...
Avatar billede erikjacobsen Ekspert
06. februar 2007 - 20:44 #14
Eller hvis du vil bruge det som en streng, så noget i retning af. Det gør det kun mere besværligt at vende den om.

$m="78";

while (strlen($m)<4) $m="0".$m;

$b=(int)substr($m,strlen($m)-1,1);
$s=(int)substr($m,strlen($m)-2,1);
$g=(int)substr($m,strlen($m)-3,1);
$sed=(int)substr($m,0,strlen($m)-3);

print "$m = $sed  $g  $s  $b<br>\n";
Avatar billede michaeltryl Seniormester
06. februar 2007 - 20:52 #15
kanon erikjacobsen det var lige det jeg søgte.
grunden til dette ikke vil virker jakobdo
$ny_bronze = $minutter % 10;...
er at der max må være tallene 1-9 i bronze,solv og guld felterne da 10 bronze mønter udløser 1 sølv og 10 sølv = 1 guld, 10 guld = 1 seddel.

Jeg synes i begge har givet god hjælp så jeg ved ikke om vil dele point?
Avatar billede jakobdo Ekspert
06. februar 2007 - 21:08 #16
Du får lige et eksempel til:

$minutter = 216378;
$str_min = (string)$minutter;
$ny_bronze = $str_min[strlen($str_min)-1];
echo 'Bronze : ' . $ny_bronze . '<br />';
$ny_solv = $str_min[strlen($str_min)-2];
echo 'Solv : ' . $ny_solv . '<br />';
$ny_guld = $str_min[strlen($str_min)-3];
echo 'Guld : ' . $ny_guld . '<br />';
$ny_seddel = substr($str_min,0,strlen($str_min)-3);
echo 'Seddel : ' . $ny_seddel . '<br />';
Avatar billede michaeltryl Seniormester
06. februar 2007 - 21:20 #17
takker, men har brugt det fra erikjacobsen. vil i have points?
Avatar billede jakobdo Ekspert
06. februar 2007 - 21:46 #18
Altid!
Avatar billede michaeltryl Seniormester
09. februar 2007 - 22:19 #19
læste lige et andet sted at erikjacobsen ikke samler på point, så jacobdo fik dem.
Tak for hjælpen til jer begge
Avatar billede jakobdo Ekspert
10. februar 2007 - 10:07 #20
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester