Autor | Zpráva | ||
---|---|---|---|
loap Profil * |
#1 · Zasláno: 1. 6. 2009, 18:45:39
Ahoj, zacinam s PHP, zajimalo by me, jakym zpusobem muzu z retezce 12/100, ziskat cislovku 12? Muze to byt 12, stejne tak jak to muze byt libovolne cislo od nuly. Zkracene, potreboval bych ulozit do nejake promene vsechny znaky po lomitko.
Predem diky |
||
Alphard Profil |
#2 · Zasláno: 1. 6. 2009, 18:47:21
Můžete to zkonvertovat na číslo, tím dostanete číslo po první nečíselný znak.
$cislo = (int) "12/100"; |
||
loap Profil * |
#3 · Zasláno: 1. 6. 2009, 19:33:45
A kdyz to cislo mam ulozene v poli? A PHP ten muj retezec bere jako sting nikoli jako int a proto se mi objevi 0. Da se to prosim udelat jeste jinacim zpusobem? napriklad regulernimi vyrazy? nebo necim podobnym?
Predem Dekuji |
||
Majkl578 Profil |
#4 · Zasláno: 1. 6. 2009, 19:50:15 · Upravil/a: Majkl578
preg_match('~^([0-9]+)~', '123/1441', $matches); var_dump($matches[0]); |
||
loap Profil * |
#5 · Zasláno: 1. 6. 2009, 20:35:14
ono je to vsechno omezene na ty cisla :( nechapu proc, ale php ten muj reztezec nebere jako cislo, ale jako znak. Kdyz jsem dal podminku s funkci is_int(), tak me to vratilo ze to neni int. Jde udelat aby se vybralo vse po lomitko a zbytek zahodil bezohledu na to zda je to cislo nebo znak?
Predem diky |
||
Majkl578 Profil |
#6 · Zasláno: 1. 6. 2009, 20:39:40
loap
trochu nechapu dotaz, pokud chces, aby vracena hodnota byla int, staci ji pretypovat. preg_match('~^([0-9]+)~', '123/1441', $number); $number = (int) $number[0]; var_dump($number); |
||
loap Profil * |
#7 · Zasláno: 1. 6. 2009, 20:49:26
Majkl578
Mam udelanou tridu pro zjisteni ranku, jenomze php to co je v te promenne chape jako znak, tudiz, kdyz to chci pretypovat ze znaku na cislo, tak se tam objevi nula. $a = $res['google']; echo $a; // objevi se 8/10 $a = (int) $res['google']; echo $a; // objevi se 0 preg_match('~^([0-9]+)~', $a, $number); $number = (int) $number[0]; var_dump($number); Ja tomu sam nejak moc nerozumim, proc se tak chova. Kazdopadne bych chtel vytvorit neco, co vybere vse po lomitkno a zbytek zahodi, takze treba kdyz bude 12a3/120, aby vypsalo 12a3. |
||
fuckin Profil * |
#8 · Zasláno: 1. 6. 2009, 20:55:53
pomoci strpos vyhledas /, tim ziskas pozici na ktere je ten znak, a pak fci strcopy vyberes znaky od nuly po tu pozici...
|
||
fandaa Profil |
#9 · Zasláno: 1. 6. 2009, 21:24:41
loap
Nebo použij explode(); a poté přetypuj (pro jistotu). |
||
AM_ Profil |
#10 · Zasláno: 1. 6. 2009, 21:53:34
Můj osobní odhad je, že PHP řetězec 8/10 pochopí jako 0.8 (8 děleno 10, že), což je po přetypování na int skutečně 0.
Už to tu bylo popsané ale asi jsi to špatně pochopil, nejdřív z toho vykuchej tu první část, a pak ji přetypuj, viz [#6] PHP přetypovává řetězce na čísla dost dobře (nejen to, implicitní konverze jsou možná až moc propracované), většinou přetypování ani nepotřebuješ, např. výsledek "8"*"10" bude správně 80, zkrátka s řetězcem reprezentujícím číslo můžeš nakládat jako s číslem a pokud přímo nezjišťuješ typ, rozdíl nepocítíš. |
||
loap Profil * |
#11 · Zasláno: 2. 6. 2009, 16:41:28
Ale kdyz udelam toto:
$prank = explode("/",$res['google']); echo gettype($prank['0']); // vypise string echo $prank['0']; //vypise 8 settype($prank['0'], "int"); echo gettype($prank['0']); // vypise integer echo $prank['0']; // vypise 0 ja vubec netusim cim to muze byt,protoze dane "cislo" se pak ani neulozi do db sloupce ktery je int. |
||
fuckin Profil * |
#12 · Zasláno: 2. 6. 2009, 18:30:57
zkus misto funkce settype pouzit toto
$prank[0] *= 1; // ze stringu to udela integer |
||
keeehi Profil |
#13 · Zasláno: 2. 6. 2009, 19:42:31
loap
Typ sloupce v databázi nemá nic společného s typem proměnné v PHP. Netuším, proč vyžadujete aby byla proměná typu integer ale funkční řešení jak získat část před lomítkem i to přetypování jste si sám napsal. To že se vám to nepodařilo uložit do databáze bude v někde jinde. Rozhodně ne v typu proměnné. |
||
Časová prodleva: 15 let
|
0