Autor Zpráva
Tomáš123
Profil
Zdravím,
Potreboval by som v mojom (asi) prvom jednoduchom skripte overiť, či sú tri premenné rovnaké. Dve porovnávam takto:
if ($e == $f)
{
    echo 'Trojuholníky sú podobné';
}
else 
{
    echo 'Trojuholníky nie sú podobné';
}

Avšak keď do podmienky uvediem if ($e == $f == $g), prehliadač hlási chybu Parse error: syntax error, unexpected '==' (T_IS_EQUAL) in ...on line 11.

Vedeli by ste mi napísať, ako mám porovnať viac ako dve hodnoty. Ďakujem za ochotu.
janbarasek
Profil
Tomáš123:
Nemůžeš porovnávat 3 věci v rámci jednoho logického výrazu, musíš to rozdělit na podvýrazy. Na př.:
<?php
if ($e == $f && $e == $g) {

}

Alternativně lze zapsat i takto (je to možná lepší čitelné):
<?php
if ($e == $f and $e == $g) {

}

Obecnosti o podmínkách najdeš u mě na webu.
juriad
Profil
$e == $f && $f == $g
Podmínku $e == $g zadávat nemusíš, ta vyplývá automaticky z tranzitivity (dokud porovnáváš čísla, jinak se to v PHP chová řekněme prazvláště)
Tomáš123
Profil
juriad:
$e == $f && $f == $g
Prezradím ti tajomstvo: "Aj ja som to urobil tak ako ty". :-).

janbarasek:
Ďakujem za ukážku a vysvetlenie.

Keď už sa pýtam tak ešte naložím:
Toto je moje HTML:
<form method="post" action="php/script.php">
    <input type="text" name="a">
    <input type="text" name="b">
    <input type="text" name="c">
    <hr>
    <input type="text" name="e">
    <input type="text" name="f">
    <input type="text" name="g">
    <hr>
    <input type="submit" value="Submit">
</form>            
A toto je PHP skript:
<?php
    $a = $_POST['a'];
    $b = $_POST['b'];
    $c = $_POST['c'];
    $e = $_POST['e'];
    $f = $_POST['f'];
    $g = $_POST['g'];
    $e/=$a;
    $f/=$b;
    $g/=$c;
    if ($e == $f and $f == $g)
    {
        echo 'Trojuholníky sú podobné';
    }
    else 
    {
        echo 'Trojuholníky nie sú podobné';
    }
?>
Otázkou je: Ako podiel premennej "e" a "a" priradiť do inej premennej napríklad do $ea a nie do $e? Teraz som to napísal tak, lebo inak som nevedel...
juriad
Profil
Tomáš123:
No, ono je PHP bastl, $e == $f == $g by v rozumném jazyku prošlo (i když není jasné, co to má znamenat):
java:
        boolean a = false, b = false, c = false;
        boolean x = (a == b == c); # x bude false; uzávorkuje se to na ((a==b) == c)
python:
        a,b,c = False, False, False
        x = (a == b == c) # bude True; vyhodnotí se jako ((a==b) and (b==c))
Když už nám umožnili toto:
function pole() {return array(0,1,2,3);}
echo pole()[1];
, tak se třeba dočkáme i řetězu porovnání.


Že by:
$ea = $e / $a;
?
Tomáš123
Profil
juriad:
Že by:...?
Prosím, nechaj si tú iróniu, vážne som nevedel ako to urobiť. Ďakujem za radu.
Jan Tvrdík
Profil
Doplním, že floaty nelze porovnávat pomocí ==. Je potřeba napsat něco jako abs($e - $f) < 1e-9

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: