Stránka 1 z 1

PHP

Napsal: ned 9. dub 2006, 20:26
od XenoCIDa
Mam dotaz, jakou nejvhodnejší cestu mam zvolit pro tento problém:
V poli $cznazev mam nějaký název a potřebuju z něho první znak a podle toho zda se znak rovná nějakej hodnotě, tak mu přiřadit jinou číselnou hodnotu.

Bohužel příkaz switch se mi zdá na toto pomalý a rád bych nějaké elegantnější řešení, ael nic mne nenapadlo. zde jen uvádím příklad toho jak to funguje s příkazem switch. Mimochodem, taky nevim jak vyřešit malá a velká písmena a navíc mi tento příkaz nebere třeba písmeno č, ale písmeno ž už ano...


$abeceda=substr($cznazev,0,1);
switch($abeceda):
case "a": break;
case "A": $abeceda=1;break;
case "b": $abeceda=2;break;
case "B": $abeceda=2;break;
case "c": $abeceda=3;break;
case "C": $abeceda=3;break;
case "č": $abeceda=3;break;
case "Č": $abeceda=3;break;
default:$abeceda=0;break;
endswitch;

Napsal: pon 10. dub 2006, 00:09
od Chap
no pro to co zde pises asi rychlejsi zpusob nenajdes, nez pres swith.
jinak nevim co ne nem je tak pomaleho.
a s tema znakama to je problem v kodovani PHP. treba č se vyjadri takhle: & #382; bez ty mezery mezi & a #

spis by bylo lepsi kdyby si lip popsal problem ktery resis, protoze z tohode nikdo nic nevymysli :-)

Napsal: pon 10. dub 2006, 07:03
od XenoCIDa
fajn dík..

no lepší popsání....

dělam takovej menší admin systém a v něm zadáváš název něčeho (název filmu, název výrobku atd..) no a jelikož bude na stránce fungovat vyhledávání podle abecedy, klikneš na C a zobrazí se ti vše od c,C,č,Č...
jako to co tim začíná... no tak mě napadlo zapsat si do mysql tabulky hodnotu to čim to začíná a poté si to pouze podle tohoto pole setřídit, enb by to mohlo ušetřit více času než pozdější vyhledávání, které by spustil uživatel...

no zatím mne napadlo toto:

$abeceda=substr(trim($cznazev),0,1);
$a=array('pism'=>$abeceda);
function zmenapism($abeceda)
{
$ab = Array("a"=>"1","A"=>"1","á"=>"1", "b"=>"2", "B"=>"2" , "c"=>"3", "C"=>"3"....atd....);
foreach ($ab as $pism=>$cisl)
{ if ($abeceda==$pism) $abeceda=$cisl; }
return $abeceda;
}
$abeceda=zmenapism($abeceda);

ale je to dle mne blbost, protože to prochází všechny hodnoty toho pole...

já fakt nevim co na to zvolit...
jinak to že to je pomalé jsem bral z :
http://www.dgx.cz/trine/item/php-pomale-switch-a-case

Napsal: pon 10. dub 2006, 09:05
od Chap
hlavne je to mozna zbytecny zaznam do DB nemyslis?
Co to osetrit az na urovni db.

switch($_GET["pismeno"]):
case 'c': $podminka="where nazev like C%' OR nazev like 'Č%' ";break
case 'č': $podminka="where nazev like C%' OR nazev like 'Č%' ";break
case 'z' : $podminka="where nazev like 'Z%' OR nazev like 'Ž%' "Break
case 'z': $podminka="where nazev like 'Z%' OR nazev like 'Ž%' "break
default: : $pom=strtoupper($_GET["pismeno"])`$podmnka ="Where nazev like '$pom%'"

je taky treba si uvedomit ,ze u nazvu filmu se nevyskytuje male pismeno.
takze staci osetrit jen specialni znaky jako ěščřžý

Napsal: pon 10. dub 2006, 15:26
od XenoCIDa
jj o těch malých písmenech sem už přemýšlel, ale kdo ví...:)

jinak, to s tim očetřením až na urovni db neni špatnej nápad... ale nezpomaluje to pak všechno? nevim zda v tuto chvíli je lepší záznam v databázi navíc nebo pár řádků, které se musí provést....

Napsal: pon 10. dub 2006, 15:58
od Chap
no myslim ze se prilis zaobiras problemem vytizeni jednotlivych casti.
Mozna by v analize problemu chtelo popremyslet jak moc ten projekt bude vyuzivany jestli prumerne 40 lidi za hodinu bude prohlizet web.
data v databazi budou jen zakladni(zadne binarni soubory atp) tak je mozna zbytecne se tak do hloubky zaobirat zatezi treba te DB.
A predpokladam ze ve filmotece nejakych 50000 zaznamu pravdepodobne taky nebude .......

Napsal: pon 10. dub 2006, 16:24
od XenoCIDa
no tak co jsem slyšel od manažera projektu a pana Plánovače :) tak základní návštěvnost je 1500-2000lidí za den..

no nevim, mě to sice nepřipadá moc reálný na začínající projekt, ale to není má starost....:)
kolik tam bude záznamů nemam vůbec potuchy... ale tipuju že tak 200bude dost


ale když říkáš, tak dam na tebe a tvůj psotup...

ale pokud se něco zvrtne.... 8) tak si tě najdu :D :D a až tě najdu, tak tě kousnu :twisted:

Re: PHP

Napsal: pát 5. kvě 2006, 23:07
od Drom
XenoCIDa píše:Mam dotaz, jakou nejvhodnejší cestu mam zvolit pro tento problém:
V poli $cznazev mam nějaký název a potřebuju z něho první znak a podle toho zda se znak rovná nějakej hodnotě, tak mu přiřadit jinou číselnou hodnotu.

Bohužel příkaz switch se mi zdá na toto pomalý a rád bych nějaké elegantnější řešení, ael nic mne nenapadlo. zde jen uvádím příklad toho jak to funguje s příkazem switch. Mimochodem, taky nevim jak vyřešit malá a velká písmena a navíc mi tento příkaz nebere třeba písmeno č, ale písmeno ž už ano...


$abeceda=substr($cznazev,0,1);
switch($abeceda):
case "a": break;
case "A": $abeceda=1;break;
case "b": $abeceda=2;break;
case "B": $abeceda=2;break;
case "c": $abeceda=3;break;
case "C": $abeceda=3;break;
case "č": $abeceda=3;break;
case "Č": $abeceda=3;break;
default:$abeceda=0;break;
endswitch;
$cznazev{0} je prvni pismeno.

Re: PHP

Napsal: stř 24. srp 2011, 11:34
od malone
Zdravím. Potřeboval bych vyřešit následující. Mám pole obsahující rozsah IP adres sítě a chci ošetřit,aby se za a) spustila nějaká akce,jakmile se připojí libovolná IP z tohoto rozsahu a za b) se ta konkrétní IP vypsala echem. V PHP nejsem zrovna expert a na tomto jsem se zasekl. Díky za nasměrování. :)

Re: PHP

Napsal: stř 24. srp 2011, 12:24
od arxeiss
IP adresa usera je uložena v $_SERVER['REMOTE_ADDR']. Jakým stylem máš uložené rozsahy IP adres? Můžeš blíže specifikovat?

Re: PHP

Napsal: stř 24. srp 2011, 13:03
od malone
Ty IP by byly jako řetězce v array a to natvrdo..

Re: PHP

Napsal: stř 24. srp 2011, 13:04
od arxeiss
Jo, ale jak máš definovaný rozsah? Nebo to tam máš jenom přesně konkrétní IPčka?

Re: PHP

Napsal: stř 24. srp 2011, 13:13
od malone
Jo takhle..:-) Ano,jen konkrétní adresy.

Re: PHP

Napsal: stř 24. srp 2011, 13:25
od arxeiss
Tak jestli daná IP adresa tam je, na to můžeš použít funkci in_array() a to je vlastně vše :D toto dáš do podmínky, vrací buď true nebo false, IP adresa je v té $_SERVER['REMOTE_ADDR'];

Re: PHP

Napsal: stř 24. srp 2011, 13:38
od malone
To by mohlo fungovat... Dík za inspiraci! :wink: