Autor Zpráva
man
Profil *
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
Že by bylo celé a větší rovno 10 a menší rovno 99?
okolojsoucí
Profil
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
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
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 *
Ani jeden příklad mi nic nevypisuje.
juriad
Profil
Ani jeden příklad nemá nic vypisovat. Tyto funkce vracejí true nebo false.
man
Profil *
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
Žá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
man:
Přistupuj k tomu jako k array:
$cifra = 25;
echo $cifra[0]; // 2
echo $cifra[1]; // 5
man
Profil *
function jeDvouciferne($cislo){
    if(is_int($cislo))
        if($cislo >= 9 && $cislo < 10)
            return true;
      return false;
    return false;
}
Překopal jsem to na tohle, ale vypíše mi zda se jedná o dvouciferné číslo nebo nejedná, ale jak mám teď v případě zjištění, že se jedná ty čísla rozdělit?


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
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
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
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
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
if(strlen($cislo) == 2) echo "číslo je dvouciferné";
Jan Tvrdík
Profil
okolojsoucí, abc:
Taky existuje funkce abs
okolojsoucí
Profil
Fisak:
A co když do proměnné $cislo vložím string av? Projde bez problému.
Fisak
Profil
okolojsoucí:
tak nebudu tu psát podmínku s is_int když už to tu několikrát zaznělo :-)
juriad
Profil
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;
Ono moc dělit dvojciferné záporné číslo na jednotlivé číslice je takové podivné. Jak by se ta funkce měla zachovat k mínusu?

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: