Autor Zpráva
HP
Profil *
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
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
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
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
Ř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)) {

trigger_error('Některé hodnoty se opakují :-(');
}
jozob
Profil
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
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
A jo, to jsem se přehlíd (já myslel, že je u obou ==). Tak to by to mělo fungovat.
error414
Profil
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.
Toto téma je uzamčeno. Odpověď nelze zaslat.