Autor Zpráva
Lister
Profil
Zdravím,
tak nejak jsem si rekl, ze si doplnim znalosti a mam dotaz k operátoru - &, aneb, co vsechno muze v php delat? ale hlavne, jak se spravne pouziva.

Projizdel jsem google a nasel jsem popis u tohoto operatoru, jako bitove scitani. Kamarad operator pouzival ve sve funkci pro vytvoreni stromu v php ("login" => "email" => "adresa" => "jmeno" => "prijimeni") (skript vygeneruje, podle zadani), sam, kdyz jsem ho testoval s = mi fungoval jako bitove scitani ($x & $y) - vylezla ze 2 slov hatmatilka, ale nedokazu ho pouzit na vytvoreni multidimenzionalniho pole. Na jednu stranu ne ze bych to potreboval, ale rad bych to umel.

Dalsi pouziti jsem videl ve foreach na webu http://php.vrana.cz/prochazeni-poli.php, tam jsem zjistil ze muze fungovat i jako jista uprava pri praci s polema.

Zkratka, jsem z toho zmateny a absolutne nemam poneti, jak spravne ho pouzit a jak siroke spektrum pouziti operator ma.

Dal bych se chtel jen okrajove zeptat, co presne dela %, umim ho pouzit (na sude, liche - if($i%2 == 0)), ale zajimalo by me jak funguje.

Dekuji za Vase reakce, doufam, ze jsem to nenapsal moc chaoticky
Lister
Profil
mimochodem ten skript na ty multi pole je tady:
private function fetchTree($result, $tree){
            $chars = array("%++");
            while($row = mysql_fetch_assoc($result)){
                $x = & $data;
                foreach ($tree as $i => $as) {
                    if(in_array($as, $chars)){
                        $x = & $x[];
                    }else{
                        if(isset($row[$as])){
                            $x = & $x[$row[$as]];
                        }else{
                            parent::error("Klic '" . $as . "' neexistuje!");
                        }
                    }
                }
                $x = $row;
            }
            unset($x);
            return $data;
        }
fuckin
Profil
% je zbytek po modularnim deleni.

5 % 2 = 1
23 % 4 = 3
100 % 30 = 10 ... Zbytek z 100/30.
SwimX
Profil
Lister:
& jako bitový součin
dyz jsem ho testoval s = mi fungoval jako bitove scitani ($x & $y) - vylezla ze 2 slov hatmatilka
taky s nim nemáš sčítat pole.
dejme tomu že v oriměnné $a = 15; čili binárně 1111
a ty chceš zjistit co je zrovna na třetím bitu tak si uděláš echo $a & 4; (protože 4 binárně je 0100)
a logický součin 1111 a 0100 -> kde jsou nuly v druhém čísle, budou nuly ve výsledku. kde je jednička v druhém čísle bude ve výsledku číslo z prvního čísla.)
takže echo by ti mělo vrátit. 100 -> 4
teď jsi nevzpomenu k čemu jsem to používal, ale jednou už jo :)

jinak ho používám pouze jako and čili && - logický součin

v příkladu od vrány je ovšem používáno php5.

modulo jsem teď vysvětlovat zde: http://diskuse.jakpsatweb.cz/.sandbox/?action=vthread&forum=9&topic=98138#4
Lister
Profil
Dekuji, rikam, ten bitovy soucit chapu, vim, ze hatmatilka byl spravny vysledek, sice si nedokazu predtsavit, kde se to da pouzit, ale chapu.
Co mi neleze do hlavy je, co to dela s tema polema a proc z toho leze vicerozmerne pole dle argumentu funkce. Z prikladu pana Vrany sem pochopil, ze to stanovi neco jako pevnost prvku, zkratka, ze se prepise a pracuje se s nim, coz by vysvetlovalo i tvorbu vicerozmerneho pole (princip $ v excelu), ale porad bych byl rad, kdyby to nekdo dokazal vysvetlit lidsky :D.

A za ten % taky dekuji, shodou okolnosti jsem to dneska nasel :D, pokusim se najit i &, tak uvidim :-), kdzytak napisu
TomášK
Profil
Operátor & slouží i ve významu reference, viz např. http://php.vrana.cz/reference-vs-kopirovani.php, v tom výše je takto použitý, nikoliv jako bitový and. Co přesně umí a neumí nevím, ale myslím, že to je správný směr dalšího hledání.
AM_
Profil
bitovy soucin se pouzije jak psal SwimX, kdyz chces zjistit konkretni bit, protoze procesor dokaze pracovat jen s celym byte.
pr:
if ($testovana_promenna & 4 == 4){
  echo 'treti bit je roven 1';
} else {
  echo 'treti bit je roven 0';
}

funguje to takhle:
1100
&1010
--------
1000
zkratka pozice, kde je v obou cislech binarne 1, bude ve vysledku taky 1, kde je v jednom nebo obou 0, bude ve vysledku 0.

& má ještě jeden důležitý význam: předání proměnné referencí. Klasicky se používá u funkcí a znamená, že předaný parametr není kopie hodnoty proměnné, ale odkaz (pointer) na ni.
Funguje to takto:
function pricti_byval($cislo){
  $cislo++;
}
function pricti_byref(&$cislo){
  $cislo++;
}

$cislo = 1;
pricti_byval($cislo);
echo $cislo; //stale 1, funkci byla predana kopie hodnoty promenne, samotna promenna v tele programu nebyla ovlivnena
pricti_byref($cislo);
echo $cislo; //vypise 2; telo programu a funkce _byref pracovali se stejnym mistem v pameti vyhrazenym pro $cislo

//podobně toho lze využít od PHP5 ve foreach:
foreach ($pole as &$val){
  $val++; //kazdemu prvku v $pole pricte 1; kdyz nenapises &, foreach vytvori pro kazdou hodnotu pole kopii ,k ni pricte 1, ale ta pri dalsim pruchodu zanikne a do puvodniho pole se v pameti nic nezapise
}
_es
Profil
Lister
Znak & môže byť použitý pri operátore bitový súčin alebo pri referenčnom operátore.

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:

0