Autor | Zpráva | ||
---|---|---|---|
man Profil * |
#1 · Zasláno: 1. 3. 2014, 11:02:26
Dobrý den, jde nějak zjistit, že se jedná o dvouciferné číslo? Potřeboval by sem to nějakou metodou zjistit a případně ty čísla oddělit aby sem snima mohl dál pracovat. Děkuji za rady
|
||
juriad Profil |
#2 · Zasláno: 1. 3. 2014, 11:06:37
Že by bylo celé a větší rovno 10 a menší rovno 99?
|
||
okolojsoucí Profil |
#3 · Zasláno: 1. 3. 2014, 11:11:47
man:
Naváži na juriada a zde máš funkci. function jeDvouciferne($cislo){ if(is_int($cislo)) if($cislo > 9 && $cislo < 100) return true; return false; return false; } |
||
juriad Profil |
#4 · Zasláno: 1. 3. 2014, 11:14:53
okolojsoucí:
Tím že nepoužíváš složené závorky jsi ve skutečnosti zapsal: function jeDvouciferne($cislo){ if(is_int($cislo)) if($cislo > 9 && $cislo < 100) return true; return false; return false; } Stačí jednodušeji: function jeDvouciferne($cislo){ return is_int($cislo) && $cislo > 9 && $cislo < 100; } |
||
Alphard Profil |
#5 · Zasláno: 1. 3. 2014, 11:17:16
Už předvídám problém, že vstup čísla je z formuláře, nepřetypovaného parsování texťáku apod. a is_int() bude házet false. V tom případě použijte is_numeric().
|
||
man Profil * |
#6 · Zasláno: 1. 3. 2014, 11:20:00
Ani jeden příklad mi nic nevypisuje.
|
||
juriad Profil |
#7 · Zasláno: 1. 3. 2014, 11:20:39
Ani jeden příklad nemá nic vypisovat. Tyto funkce vracejí true nebo false.
|
||
man Profil * |
#8 · Zasláno: 1. 3. 2014, 11:24:46 · Upravil/a: man
aha, ale já právě potřebuji aby mi vypsal pokud bude číslo 22, tak aby ho rozdělilo na 2 a 2. Jde to?
Zjištění zda se jedná o dvouciferné číslo a pokud ano, tak ho rozdělit na již uvedený příklad. |
||
okolojsoucí Profil |
man:
Využij to do podmínky if(jeDvouciferne(99)){ echo 'Je'; }else{ echo 'Není'; } juriad: Díky za postřeh, ale nepochopím když můj ([#3]) otestují kód online tak funguje bez problému. Zkus do toho pole napsat toto. function jeDvouciferne($cislo){ if(is_int($cislo)) if($cislo > 9 && $cislo < 100) return true; return false; return false; } var_dump(jeDvouciferne(9)); echo '<br />'; var_dump(jeDvouciferne(50)); echo '<-- zde vrati <strong>true</strong>'; echo '<br />'; var_dump(jeDvouciferne(100)); echo '<br />'; Funguje bez chyby. |
||
Fisir Profil |
#10 · Zasláno: 1. 3. 2014, 11:30:26
Žádný z vás tu neřeší „ty čísla oddělit aby sem snima mohl dál pracovat“.
function jeDvouciferne($number){ if(is_numeric($number)){ if($number > 9 and $number < 100){ preg_match_all("/\d/", $number, $numbers); $i = 0; while($i < count($numbers[0])){ $numbers[0][$i] = $numbers[0][$i]*1; $i++; } return $numbers[0]; } else { return false; } } else { return false; } } |
||
okolojsoucí Profil |
#11 · Zasláno: 1. 3. 2014, 11:30:32
|
||
man Profil * |
#12 · Zasláno: 1. 3. 2014, 11:32:10 · Upravil/a: man
function jeDvouciferne($cislo){ if(is_int($cislo)) if($cislo >= 9 && $cislo < 10) return true; return false; return false; } Děkuji, už je to vyřešený. Jste dobrý |
||
okolojsoucí Profil |
man:
„($cislo >= 9 && $cislo < 10“ Co to je za podmínku? Já bych to následně řešil takto function jeDvouciferne($cislo){ if(is_int($cislo)) if($cislo > 9 && $cislo < 100) return str_split($cislo); return false; return false; } A návrat je v tomto případě již buď false nebo array ( array(2) { [0]=> string(1) "9" [1]=> string(1) "9" } )
I když je to datového typu string tak není problém s ním nadále pracovat jako číslo. Např: echo reset(jeDvouciferne(95)) + next(jeDvouciferne(95)); // = 14 |
||
juriad Profil |
#14 · Zasláno: 1. 3. 2014, 11:43:02
okolojsoucí:
Ono to funguje správně, jen ten return na řádce 5 se provede vždy, když jakákoli podmínka není splněná. Return na řádce 6 nikdy nenastane. Tvůj kód je uzávorkovaný následovně (na odsazení nezáleží): function jeDvouciferne($cislo){ if(is_int($cislo)) { if($cislo > 9 && $cislo < 100) { return str_split($cislo); } } return false; return false; } function jeDvouciferne($cislo){ return is_int($cislo) && $cislo > 9 && $cislo < 100 ? str_split($cislo) : false; } |
||
fandaa Profil |
#15 · Zasláno: 1. 3. 2014, 11:44:01
okolojsoucí:
Zrovna u tohoto kusu kódu problém nenastane. Ověřit si chybu můžeš na tomto kódu: function jeDvouciferne($cislo){ if(is_int($cislo)) if($cislo > 9 && $cislo < 100) return true; return true; return false; } var_dump(jeDvouciferne("bflmpsvz")); echo '<br />'; var_dump(jeDvouciferne(9)); echo '<br />'; var_dump(jeDvouciferne(50)); echo '<-- zde vrati <strong>true</strong>'; echo '<br />'; var_dump(jeDvouciferne(100)); echo '<br />'; Vrací vždy true. Proto je dobré vědět, jak se kód bez závorek chová a případně se takovýmto řešením vyhýbat, špatně se pak tyto chyby totiž hledají. Snaž se vždy psát kód tak jednoduchý, jak jen to jde - viz [#14] juriad. |
||
okolojsoucí Profil |
#16 · Zasláno: 1. 3. 2014, 11:45:51
juriad:
Jo takhle :)) A já ve svých kódech nevině to takto píšu :) Díky, budu muset udělat i update u sebe :) mane využil juriaduv zkrácený kód. Dělá to samé, ale je jen 3 řádkový. |
||
Jan Tvrdík Profil |
#17 · Zasláno: 1. 3. 2014, 13:29:45
Zvláštní, že nikoho nenapadlo, že dvouciferné číslo může být taky záporné :)
|
||
okolojsoucí Profil |
Jan Tvrdík:
Aou :) Toje fakt. V tom případě to chce aktualizaci funkce :) function jeDvouciferne($cislo){ return is_int($cislo) && $cislo > 9 && $cislo < 100 || $cislo < -9 && $cislo > -100 ? str_split($cislo) : false; } Ale záporný číslo vrací array ve tvaru ('-', '9', '9'); tak že se musí ověřit zda-li je první mínus nebo nebo číslo. |
||
abc Profil |
okolojsoucí:
Takhle snad ne ne? Funkce by snad měla vždy vracet stejný výsledek, nezávisle na vstupu... (blbě vyjádřeno, ale snad bude pochopeno :-)) function jeDvoudiferne($cislo){ if ($cislo < 0) { $cislo = -$cislo; } return is_int($cislo) && $cislo > 9 && $cislo < 100 ? str_split($cislo) : FALSE; } |
||
Fisak Profil |
#20 · Zasláno: 1. 3. 2014, 13:48:17
if(strlen($cislo) == 2) echo "číslo je dvouciferné";
|
||
Jan Tvrdík Profil |
#21 · Zasláno: 1. 3. 2014, 13:48:48
okolojsoucí, abc:
Taky existuje funkce abs |
||
okolojsoucí Profil |
#22 · Zasláno: 1. 3. 2014, 14:10:28
Fisak:
A co když do proměnné $cislo vložím string av? Projde bez problému.
|
||
Fisak Profil |
#23 · Zasláno: 1. 3. 2014, 14:24:26
okolojsoucí:
tak nebudu tu psát podmínku s is_int když už to tu několikrát zaznělo :-) |
||
juriad Profil |
#24 · Zasláno: 1. 3. 2014, 15:16:25
okolojsoucí:
No fuj. Co priorita operátorů. V tvém případě by prošel i řetězec "-42", přestože to není číslo. return is_int($cislo) && ($cislo > 9 && $cislo < 100 || $cislo < -9 && $cislo > -100) ? str_split($cislo) : false; |
||
Časová prodleva: 10 let
|
0