Stránka: 1 z 1
| [ Príspevkov: 16 ] | |
Autor | Správa |
---|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | 56 |
Ok prave som vymazal celu otazku na 20 riadkov a pisem ju na 4 riadky..
potrebujem napisat funkciu ktora mi z pola $_POST vrati hodnotu podla indexu .. a aby fungovala aj na viacurovnove pole napriklad:
post('billing,name');
function post($index){ .... a funkcia vrati index z pola $_POST -> $_POST['billing']['name'] ak taky index neexistuje vrati false }
ako to urobit aby funkcia zbehla co najrychlejsie ? cez foreach mi to je jasne ... da sa to aj inak ?
ps. parameter pre funkciu post musi byt iba jeden
|
|
Registrovaný: 02.06.08 Prihlásený: 19.07.16 Príspevky: 3325 Témy: 147 | 147 Bydlisko: Žilina / Os... |
http://stackoverflow.com/questions/2433 ... t-with-phpParameter do funkcie si pošli aj array ak to budeš potrebovať Kód: array(1 => 'index1', 2 => 'index2'); array('1', '2') nieje multi-dim. array, správne to bude array(array('data'),'2') a podobne  Ak nepotrebuješ iterovať cez pole môžeš využiť na zistenie nastaveného prvku Kód: isset(data['index']) @return true / false Kód: function PostData($index) { if(isset($_POST[$index] == true) return $_POST[$index]; return false; }
_________________ PC - ASUS M2N-MX Se+ | AMD X2 4200+ | 2GB RAM | Nvidia 8600GT | WD 320GB | 350W |NTB - ASUS K50AB SX-010 | | ASUS X550L | SteelSeries Mousepad | A4tech XL-750BF | HTC Explorer | CCNA (640-802) | |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Okrem cyklu mozes este pouzit eval (radsej nie), alebo vyuzijes napr. funkciu array_reduce
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | 56 |
majky358 píše: http://stackoverflow.com/questions/2433727/submitting-a-multidimensional-array-via-post-with-php Parameter do funkcie si pošli aj array ak to budeš potrebovať Kód: array(1 => 'index1', 2 => 'index2'); array('1', '2') nieje multi-dim. array, správne to bude array(array('data'),'2') a podobne  Ak nepotrebuješ iterovať cez pole môžeš využiť na zistenie nastaveného prvku Kód: isset(data['index']) @return true / false Kód: function PostData($index) { if(isset($_POST[$index] == true) return $_POST[$index]; return false; } to mi je jasne ... ja potrebujem tu funkciu pre mutli pole ...ak mam vo formulari napriklad input: name="billing['index1']['index2']['index3']..." a chcem zavolat napriklad post(array('index1','index2','index3')) tak nech to vrati hodnotu alebo false ak nieco take v poste nieje ... ale ako parsovat ten predany index a zistit ci je v poste co najrychlejsie
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Zda sa ti, ze riesenie cez cyklus je pomale. ci preco hladas nieco ine? Logicky, najrychlejsie to bude bez pouzitia funkcie, priamo uvedenim mena premennej aj s indexmi, opacny pripad a jeho rychlost spracovania si musis uz otestovat sam. Ako som uz spominal vyssie, mozes pouzit aj nieco taketo: Kód: array_reduce($index, $callback, $_POST) V samotnej $callback funkcii potom zabezpecis, aby ti vratilo v pripade existencie jednotlivych vnorenych indexov hodnotu daneho prvku pola, alebo false pri chybe.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | 56 |
no vacsinou su primarne php funkcie rychlejsie ako cyklus .. preto hladam odpoved co bude najrychlejsia moznost .. neskusal som to vsak preto sa pytam ci mi niekto nieco poradi co by som s cyklusom porovnal ...
pre pouzitie tej funkcie array_reduce musim tie predane indexy tak isto iba prechadzat cyklusom aby som ich po jednom predal funkcii a zistil ci v tom $_POST poli dany index existuje nie ? .. vobec nvm ako to myslis s pouzitim tej funkcie
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Nie, tam ziadny vlastny cyklus na prechadzanie jednotlivych indexov nepotrebujes pouzit, o to sa ti stara callback funkcia. Do nej sa ti vzdy automaticky preda jeden z indexov, s ktorym potom mozes pracovat a zistovat, ci existuje v cielovom poli ($_POST). Ak sa tam taky nachadza, budes pracovat uz len so zvysnou castou pola patriacou pod dany index. A takto sa to stale opakuje, kym sa nevycerpaju vsetky indexy, ktorych existenciu chces zistit. Pozri si priklady v manuali, bude ti to hadam jasnejsie.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | 56 |
aha tou funkciou mam prechadzat predane indexy ... uz rozumiem o co ti ide .. tu funkciu som ale vyskusal a sprava sa to divne Kód: $arr = array('billing' => array('name' => array('first' => "meno")));
function callback2($carry, $item) { print_r($carry); return $carry; } echo '<pre>'; var_dump(array_reduce(array('billing', 'name', 'first'), 'callback2', $arr)); echo '</pre>'; Citácia: mixed array_reduce ( array $array , callable $callback [, mixed $initial = NULL ] )
array The input array.
callback mixed callback ( mixed $carry , mixed $item )
$carry Holds the return value of the previous iteration; in the case of the first iteration it instead holds the value of initial. $item Holds the value of the current iteration.
initial If the optional initial is available, it will be used at the beginning of the process, or as a final result in case the array is empty. preco to pole nevidim vypisane 3x .. na zaciatku mu predam cele pole a chcem vytiahnut hodnotu prveho indexu ... ale to pole tam proste nieje ... vysledok toho kodu je: Citácia: 111int(1) preco tam su 3x1 ked mi to ma vypisat pole ... nie ? .. ak plati ze $carry drzi hodnotu ktoru vrati v predoslej iteracie ... a pri prvej iteracii drzi hodnotu $initial .. tak by tam malo byt trikrat to pole ... nechapem tomu ..
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Pravdepodobne pouzivas php verziu < 5.3, to by vysvetlovalo, preco ti to vypise 1.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | 56 |
aha vazne nevsimol som si changelog .. kurnik ... cize mi to je na prd ... to by bolo idealne riesenie myslim .. mas inu radu ?
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Ak nemozes pouzit 3. parameter, jednoducho si jeho funkcionalitu doplnis do callback funkcie (kvoli prvej iteracii) a osetris este pripad, ak je predane pole s indexami prazdne.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 05.10.06 Prihlásený: 15.10.18 Príspevky: 1891 Témy: 148 | 148 Bydlisko: Bratislava |
Preco to zbytocne komplikujes a chces vybrat konkretnu hodnotu aj z 2D pola? Podstatne jednoduchsie by bolo nacitat cele pole a potom si uz vyberies
$arr = post('pole'); echo $arr['2D'];
Ja osobne casto vyuzivam funkciu, ktoru som si pozical z phpbb. Najdes ju v includes/functions.php , vola sa request_var() a vytiahnes s nou post, get, cookies, multibyte hodnoty, nastavis si default hodnotu ak hodnota nie je odoslana..
_________________ Notebook Dell 7537, 24" BenQ BL2411PT, Logitech Illuminated keyboard, Razer DeathAdder, Razer Goliathus, Koss Porta Pro |
|
Registrovaný: 28.02.09 Prihlásený: 19.02.18 Príspevky: 241 Témy: 56 | 56 |
preto, ze je podstatne jednoduchsie napisat Kód: if (post(array('shipping', 'same_as_billing'))=='1') { .... } ako: Kód: $shipping = post('shipping'); if (isset($shipping['same_as_billing']) && $shipping['same_as_shipping']=='1') { .... } a ak mas rozmernejsie pole v poste je tam toho "zbytocneho" kodu ktory mozem napisat jednou funkciou a predat jej parameter dost vela // Spojený príspevok Str 28.05.14 0:34Kamahl píše: Ja osobne casto vyuzivam funkciu, ktoru som si pozical z phpbb. Najdes ju v includes/functions.php , vola sa request_var() a vytiahnes s nou post, get, cookies, multibyte hodnoty, nastavis si default hodnotu ak hodnota nie je odoslana.. s phpbbb som este nepracoval .. mozem mi tu postnut tu funkciu ak si myslis ze to moj "problem" vyriesi ?
|
|
Registrovaný: 05.10.06 Prihlásený: 15.10.18 Príspevky: 1891 Témy: 148 | 148 Bydlisko: Bratislava | |
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Kamahl píše: Ja osobne casto vyuzivam funkciu, ktoru som si pozical z phpbb. Najdes ju v includes/functions.php , vola sa request_var() a vytiahnes s nou post, get, cookies, multibyte hodnoty, nastavis si default hodnotu ak hodnota nie je odoslana.. Jeho problem to ale neriesi. Ta funkcia vracia opat len pole s pozadovanymi indexami, nie priamo hodnotu daneho prvku pola. Navyse je obmedzena len na 2 urovne (vacsinou to ale staci), takze v pripade vacsieho pola je to v podstate nepouzitelne.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 05.10.06 Prihlásený: 15.10.18 Príspevky: 1891 Témy: 148 | 148 Bydlisko: Bratislava |
Ved to som mu aj pisal, ze preco to komplikuje. Nech si vrati pole a potom si z neho uz klasicky vyberie hodnotu, ktoru potrebuje. Jendoduchsie riesenia su tie najlepsie.
_________________ Notebook Dell 7537, 24" BenQ BL2411PT, Logitech Illuminated keyboard, Razer DeathAdder, Razer Goliathus, Koss Porta Pro |
|
Stránka: 1 z 1
| [ Príspevkov: 16 ] | |
|