Autor | Zpráva | ||
---|---|---|---|
Lister Profil |
#1 · Zasláno: 2. 8. 2009, 12:14:51
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 |
#2 · Zasláno: 2. 8. 2009, 12:15:41
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 |
#3 · Zasláno: 2. 8. 2009, 12:28:26
% je zbytek po modularnim deleni.
5 % 2 = 1 23 % 4 = 3 100 % 30 = 10 ... Zbytek z 100/30. |
||
SwimX Profil |
#4 · Zasláno: 2. 8. 2009, 14:21:14
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 |
||
Časová prodleva: 7 dní
|
|||
Lister Profil |
#5 · Zasláno: 9. 8. 2009, 16:15:41 · Upravil/a: Lister
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 |
#6 · Zasláno: 9. 8. 2009, 16:33:35 · Upravil/a: TomášK
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 |
#7 · Zasláno: 9. 8. 2009, 16:37:20
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 |
#8 · Zasláno: 9. 8. 2009, 16:38:57
|
||
Časová prodleva: 15 let
|
0