Gå til innhold

Funksjon for å lage input til byte


Gjest Slettet+6132

Anbefalte innlegg

Gjest Slettet+6132
Skrevet (endret)

God kveld/natt/morgen ( :sleep: )

 

Sitter da her og kjeder meg, og så er det en liten funksjon som jeg ikke får helt til slik jeg vil.

 

function makebyte($input) {
 $split = split(" ", $input);
 
 $size = $split[0];
 $prefix = $split[1];

 if ($prefix == "kB") {
   $bytes = $size * 1024;
 }
 if ($prefix == "MB") {
   $bytes = $size * 1024 * 1024;
 }
 if ($prefix == "GB") {
   $bytes = $size * 1024 * 1024 * 1024;
 }
 else {
   $bytes = "0";
 }
 return $bytes;
}

 

Bruksmåten er simpel, makebyte("45 GB");, men noe fungerer ikke som jeg har lyst. Hvis jeg bruker enkel "=" på if så hopper den tin GB uansett, hvis jeg bruker doble så returnerer den 0. Noen som orker å hjelpe en trøtt stakkar? ;)

Endret av Slettet+6132
Videoannonse
Annonse
Gjest Slettet+6132
Skrevet (endret)
Hva er problemet med den? Den fungerer bra den.

Har du virkelig testa den? Den funker kun om prefix er "GB", og da gir den et feil tall.

 

<?

$test = makebyte("34 MB");

echo "$test";

?>

 

Gir ut 0. Så noe må være galt :p

Endret av Slettet+6132
Skrevet

Okay... svarte vist litt for tidlig i dag.

Feilen din er at du bruker if hele veien og ikke elseif.

 

Det betyr at

 

if ($prefix == "GB") {

$bytes = $size * 1024 * 1024 * 1024;

}

else {

$bytes = "0";

 

else her er else uansett hva annet enn GB det er.

Gjest Slettet+6132
Skrevet (endret)
Okay... svarte vist litt for tidlig i dag.

Feilen din er at du bruker if hele veien og ikke elseif.

 

Det betyr at 

 

if ($prefix == "GB") {

  $bytes = $size * 1024 * 1024 * 1024;

}

else {

  $bytes = "0";

 

else her er else uansett hva annet enn GB det er.

Men hvis jeg fjerner else så går den rett til GB uansett :no:

 

Edit: har prøvd med elseif også

Endret av Slettet+6132
Skrevet (endret)

function makebyte($input) {

$split = split(" ", $input);

 

$size = $split[0];

$prefix = $split[1];

 

echo $prefix;

 

if ($prefix == "kB") {

$bytes = $size * 1024;

}

elseif ($prefix == "MB") {

$bytes = $size * 1024 * 1024;

}

elseif ($prefix == "GB") {

$bytes = $size * 1024 * 1024 * 1024;

}

else {

$bytes = "0";

}

return $bytes;

}

 

echo makebyte("34 MB");

 

 

 

Se: http://no2.php.net/manual/en/control-structures.elseif.php

Endret av ????????
Gjest Slettet+6132
Skrevet

Funker fortsatt ikke, er noe bøg med de ifene. :thumbdown:

Skrevet

Hva er problemet, her gir det scriptet:

 

echo makebyte("20 KB")."\n";

echo makebyte("20 MB")."\n";

echo makebyte("20 GB")."\n";

echo makebyte("20")."\n";

 

KB20480

MB20971520

GB21474836480

0

 

Jeg ser at du hadde skrevet liten b i KB (kB). Annet enn det så stemmer alle verdiene.

Gjest Slettet+6132
Skrevet (endret)
Hva er problemet, her gir det scriptet:

 

echo makebyte("20 KB")."\n";

echo makebyte("20 MB")."\n";

echo makebyte("20 GB")."\n";

echo makebyte("20")."\n";

 

KB20480

MB20971520

GB21474836480

0

 

Jeg ser at du hadde skrevet liten b i KB (kB). Annet enn det så stemmer alle verdiene.

Her også, men hvis du prøver med desimaltall blir det plutselig feil :(

 

EDIT: Ser problemet, US standard bruker punktum på komma, og komma for å skille tusener. Nå funka det, takk :)

 

EDIT: Slik blir funksjonen nå:

function makebyte($input) {
 $split = split(" ", $input);

 $size = $split[0];
 $size = str_replace(",", ".", $size);
 $prefix = $split[1];

 if ($prefix == "kB") {
   $bytes = $size * 1024;
 }
 elseif ($prefix == "MB") {
   $bytes = $size * 1024 * 1024;
 }
 elseif ($prefix == "GB") {
   $bytes = $size * 1024 * 1024 * 1024;
 }
 else {
   $bytes = "0";
 }
 return $bytes;
}

Endret av Slettet+6132

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...