Autor Zpráva
capricorn
Profil
Zdravim, nejak mne nejde do hlavy, proc nize uvedena funkce v jednom pripade zobrazi hodnotu spravne a v druhem pripadne zobrazi hodnotu, ktera v poli vubec neni.


function filtr($nazev){

$filtr = array('order' => array('asc' => 'Vzestupnì', 'desc' => 'Sestupnì'),
                     'limit' => array('10' => '10', '20' => '20', '30' => '30', '40' => '40', '50' => '50')
                    );

foreach($filtr[$nazev] as $klic => $hodnota){
if(!isset($_GET[$nazev]) || !array_key_exists($_GET[$nazev], $filtr[$nazev])){
$zvoleno = key(array_slice($filtr[$nazev], 0 , 1));
} else {
$zvoleno = $_GET[$nazev];
}
}
return $zvoleno;
}

echo filtr('order'); // zobrazi spravne asc
echo "<br />";
echo filtr('limit'); // zobrazi 0 pritom tato hodnota v poli neni

BetaCam
Profil
capricorn

No ono celá ta tvá funkce je nějaká podivná.

1) Tam neni ochrana když se překlepneš ve volání té fukce filtr('arder'); tak ti to vyhodi zákonitě NOTICE, že požaduješ nedefinovanej klíč pole a tim rovnou WARNING, protože foreach nedostane pole.

2) Neinicializuješ proměnné což pokud nastane bod 1. zapříčiní další NOTICE

3) čísla 10, 20, 30, 40, 50 určitě nejsou string, ale integer takže nevím proč je máš v uvozovkách

4) Takhle by to mělo být rychlejší

function filter($name){
$key = FALSE;
$filter = array('order' => array('asc' => 'vzestupne', 'desc' => 'sestupne'),
			   'limit' => array(10 => 10, 20 => 20, 30 => 30, 40 => 40, 50 => 50));

if (!array_key_exists($name, $filter)){ return FALSE; }
if (isset($_GET[$name])) { $key = array_search($_GET[$name], $filter[$name]); }
if ($key === FALSE){ $key =  key($filter[$name]); }
return $key;

}

echo filter('order');
echo "<br />";
echo filter('limit');

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