Autor Zpráva
loap
Profil *
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
Můžete to zkonvertovat na číslo, tím dostanete číslo po první nečíselný znak.
$cislo = (int) "12/100";
loap
Profil *
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
preg_match('~^([0-9]+)~', '123/1441', $matches);
var_dump($matches[0]);
loap
Profil *
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
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 *
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 *
pomoci strpos vyhledas /, tim ziskas pozici na ktere je ten znak, a pak fci strcopy vyberes znaky od nuly po tu pozici...
fandaa
Profil
loap
Nebo použij explode(); a poté přetypuj (pro jistotu).
AM_
Profil
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 *
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 *
zkus misto funkce settype pouzit toto

$prank[0] *= 1; // ze stringu to udela integer
keeehi
Profil
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é.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: