Dit is een topic in Community » Forum » Pro » Web ontwikkeling

[PHP] String omzetten naar integer onmogelijk?

vikking

vikking op 23 januari 2008 #

Oké, ik word ongeveer zot :P. Ik wil van een string een integer maken om er berekeningen mee te kunnen doen. Ik dacht aan dit: var_dump($tracks_played); var_dump((int)$tracks_played); geeft:

string(33) "20069" int(0)

en aan dit: var_dump($tracks_played); $foo = intval($tracks_played); var_dump($foo); geeft:

string(33) "20069" int(0)

en zelfs dit: var_dump($tracks_played); settype($tracks_played, "integer"); var_dump($tracks_played); en dat geeft (je kan het al raden):

string(33) "20069" int(0)

Wat in godsnaam doe ik verkeerd? En als het een stomme fout is, vergeef me want ik ben ongelooflijk moe :P. Alvast bedankt!

rbroek op 23 januari 2008 #

Waarom wil je er per se een int van maken? PHP laat je namelijk gewoon rekenen met de string: echo "20069" + 1; geeft 20070.

Waba op 23 januari 2008 #

Dit is volgens mij helemaal niet nodig en kun je direct je berekeningen doen. probeer anders dit: $tracks_played = (int) $tracks_played; [EDIT] Te laat :P

vikking

vikking op 23 januari 2008 #

Nja, dat dacht ik ook totdat: $tracks_played = "20069"; $diff = 64529727; $day = 86400; $output = ($tracks_played / $diff) * $day; echo $output; gelijk was aan int(0).... //Edit: Hmmm, der moet ergens iets verkeerd zijn met mijn variabelen. Ff het hele script posten: $data = file_get_contents("cache"); preg_match_all("^<strong>Registered:</strong> [0-9]{1,2} [A-Za-z]{3} [0-9]{4}^", $data, $temp, PREG_OFFSET_CAPTURE); $registered = str_replace("Registered: ", "", strip_tags($temp[0][0][0])); preg_match_all("^<span class="nowrap">[0-9]{1,3},[0-9]{1,3}</span>^", $data, $temp, PREG_OFFSET_CAPTURE); $tracks_played = str_replace(",", "", $temp[0][0][0]); $temp = explode(" ", $registered); $months = array(null, "jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "nov", "dec"); $month_key = array_search(strtolower($temp[1]), $months); $now = time(); $then = mktime(0, 0, 0, $month_key, $temp[0], $temp[2]); $diff = $now - $then; $day = 60 * 60 * 24; $output = ($tracks_played / $diff) * $day; var_dump($output);

iJoost op 23 januari 2008 #

Als het berekend wordt middels een integer deling dan klopt die uitkomst natuurlijk wel. Dus een floating point deling ervan zien te maken. Of eerst vermenigvuldigen en daarna delen. Dat kan ook. Dan blijft er zelfs bij een integer-berekening nog wel wat over.

vikking

vikking op 23 januari 2008 #

Hmm, inderdaad, maar aangezien $output niet voordien gebruikt en gedeclared is, mag dat hier toch geen probleem zijn?

mhrenes

mhrenes op 24 januari 2008 #

En als je intval gebruikt?

vikking

vikking op 24 januari 2008 #

mhrenes En als je intval gebruikt?

Whoops, dat 2de moest intval zijn, niet intvar :P. Nogsteeds geen oplossing gevonden...

iJoost op 24 januari 2008 #

Je begreep niet wat ik zei? $output = ($tracks_played * $day) / $diff;

vikking

vikking op 24 januari 2008 #

iJoost Je begreep niet wat ik zei? $output = ($tracks_played * $day) / $diff;

Heb ik al geprobeerd, geeft:

int(0)

-_-" Nog wat meer tests: $output = ($tracks_played * $day) / $diff; echo "<pre>"; var_dump($tracks_played); var_dump($day); var_dump($diff); var_dump($output); echo "</pre>"; geeft:

string(33) "20115" int(86400) int(64613823) int(0)

en var_dump($tracks_played / 12); geeft vreemdgenoeg:

int(0);

*zucht* :P

vikking

vikking op 24 januari 2008 #

Oké, gevonden, duidelijk niet genoeg tags uit mijn input gestripped :P. Vandaar de string(33), natuurlijk te veel tekens voor een getal van 5 cijfers... Achja.

Etiennetje op 27 januari 2008 #

Probeer eens: $test = (int) "24" + 0;

Je kunt alleen reageren met een gratis OMT account.
Log in of registreer.

Inloggen

Over dit topic

Gestart op 23 januari 2008 door vikking

Laatste reactie door Etiennetje

Reageer op dit topic