Autor | Zpráva | ||
---|---|---|---|
HP Profil * |
#1 · Zasláno: 12. 1. 2006, 11:19:15
Cau,
uz jsme to jednou resili, ale nepodarilo se mi to rozjet. Popisu znovu co mam za problem: odeslani formulare dostanu mimo jine tyto promenne s hodnotami napr.: $_POST['a'] = '2'; $_POST['b'] = '3'; $_POST['c'] = '5'; $_POST['d'] = '9'; tech promennych muze byt ale mene nebo vice. Muj problem spociva v tom, abych je porovnal a pokud bude mit nejaka stejnou hodnotu, tak at se vypise chybova hlaska. Pokud bude kazda jinak, tak at skript pokracuje dale. Nekdo mi poradil, ze to jde pomoci: foreach ($_POST as $key => $value) { foreach ($_POST as $key2 => $value2) { if ($value == $value2 && $key != $key2) { return FALSE; } } } return TRUE; To jsem ale nerozchodil... sad smiley Muzete mi to prosim nekdo napsat jak to ma byt? Dekuji HP |
||
error414 Profil |
#2 · Zasláno: 12. 1. 2006, 12:20:48 · Upravil/a: error414
Sice prasarna ale mozna rychla, nevim jak je rychla fce
array_unique foreach ($_POST as $key => $value) { $pracovni[$key] = $value; return FALSE; } $pocet1 = count($pracovni); $result = array_unique($pracovni); if(count($result) != $pocet1){ return false; }else{ return true } dodatek: je to hodne pomale |
||
jozob Profil |
#3 · Zasláno: 12. 1. 2006, 12:47:35
HP
Neviem, prečo by to prvé nemalo fungovať. (?) Malá kontrolná otázka (neviem, ako ďaleko si na tom z PHP): máš ten kód vo funkcii? (bez urážky, neviem či si začiatočník, alebo pokročilý) |
||
llook Profil |
#4 · Zasláno: 12. 1. 2006, 13:01:07 · Upravil/a: llook
jozob Neviem, prečo by to prvé nemalo fungovať.
Protože se tam porovnává každé pole s každým (včetně sebe), takže do toho ifu půjdou prvky pole v tomto pořadí: 1 iterace: $_POST['a'] s $_POST['a'] 2 iterace: $_POST['a'] s $_POST['b'] 3 iterace: $_POST['b'] s $_POST['a'] 4 iterace: $_POST['b'] s $_POST['b'] To vždycky skončí false při první iteraci ('a' == 'a' && '2' == '2'). |
||
llook Profil |
#5 · Zasláno: 12. 1. 2006, 13:06:54 · Upravil/a: llook
Řešení by mohlo používat array_unique, jak radí error414. To je funkce, která vrátí pole, ve kterém je každá hodnota jen jednou.
Například pro array_unique(array('a' => 1, 'b' => 1)); vrátí array('a' => 1). Pak stačí třeba porovnat velikost s původním polem: if (count(array_unique($_POST)) != count($_POST)) { |
||
jozob Profil |
#6 · Zasláno: 12. 1. 2006, 13:16:29 · Upravil/a: jozob
llook
Lenže v podmienke je aj $key != $key2, takže dve hodnoty s rovnakým kľúčom sa síce porovnajú, ale ak to nastane, podmienka sa nesplní. Alebo sa mýlim? |
||
jozob Profil |
#7 · Zasláno: 12. 1. 2006, 13:19:09
Ale to riešenie pomocou array_unique() je určite krajšie. A myslím, že ak ide o predávanie parametrov cez POST, na rýchlosťi pravdepodobne ani nebude záležať. (1.) určite nebude premenných veľa 2.) väčšinu času aj tak zaberie posielanie premenných)
|
||
llook Profil |
#8 · Zasláno: 12. 1. 2006, 13:29:07
A jo, to jsem se přehlíd (já myslel, že je u obou ==). Tak to by to mělo fungovat.
|
||
error414 Profil |
#9 · Zasláno: 12. 1. 2006, 13:33:47
llook
Například pro array_unique(array('a' => 1, 'b' => 1)); vrátí array('a' => 1). Pak stačí třeba porovnat velikost s původním polem: nejsem si jisty ale tak to mam ja. Jen me tam prebyva jedno false. |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0