Old dutch Forum: Algemeen
Dit forum is gesloten. Het nieuwe is hier te vinden. Er is wel nieuwe registatie nodig. ExcusesTerug naar de Forum Lijst
>>
Terug naar de Lijst Onderwerpen
>>
Bekijk alle berichten
Meerdere categorieen uitsluiten
Ingezonden woensdag, 04 augustus 2010 door yaroon
Aangepast: woensdag, 04 augustus 2010
Ik gebruik op dit moment de volgende callback:
--------------
function pixmania_cb(&$item) {
generic_cb($item);
#categorie verwijderen
if ( preg_match("/baby.*/i",$item['menu_1'] ) ) {
$item['title']='';
}
if ( preg_match("/bad.*/i",$item['menu_1'] ) ) {
$item['title']='';
}
if ( preg_match("/bed.*/i",$item['menu_1'] ) ) {
$item['title']='';
}
#categorie hernoemen
$item['menu_1']=preg_replace("/car.*/i","Auto",$item['menu_1']);
$item['menu_1']=preg_replace("/auto.*/i","Auto",$item['menu_1']);
$item['menu_1']=preg_replace("/audio.*/i","Audio",$item['menu_1']);
$item['menu_1']=preg_replace("/CAMCORDER.*/i","Camcorders",$item['menu_1']);
$item['menu_1']=preg_replace("/foto.*/i","Fotografie",$item['menu_1']);
}
-----------------------
Is er een manier om bovenstaande sneller/korter op te lossen. Het gaat dan vooral om het deel #categorie verwijderen
Alvast bedankt!
Jeroen
--------------
function pixmania_cb(&$item) {
generic_cb($item);
#categorie verwijderen
if ( preg_match("/baby.*/i",$item['menu_1'] ) ) {
$item['title']='';
}
if ( preg_match("/bad.*/i",$item['menu_1'] ) ) {
$item['title']='';
}
if ( preg_match("/bed.*/i",$item['menu_1'] ) ) {
$item['title']='';
}
#categorie hernoemen
$item['menu_1']=preg_replace("/car.*/i","Auto",$item['menu_1']);
$item['menu_1']=preg_replace("/auto.*/i","Auto",$item['menu_1']);
$item['menu_1']=preg_replace("/audio.*/i","Audio",$item['menu_1']);
$item['menu_1']=preg_replace("/CAMCORDER.*/i","Camcorders",$item['menu_1']);
$item['menu_1']=preg_replace("/foto.*/i","Fotografie",$item['menu_1']);
}
-----------------------
Is er een manier om bovenstaande sneller/korter op te lossen. Het gaat dan vooral om het deel #categorie verwijderen
Alvast bedankt!
Jeroen
Re: Meerdere categorieen uitsluiten
Ingezonden woensdag, 04 augustus 2010 door Bram
Aangepast: woensdag, 04 augustus 2010
met sneller en korter kun je twee verschillende dingen bedoelen.
om het sneller te maken:
* plaats achter de $item['title']=''; een return; de rest hoeft toch niet meer gedaan te worden.
*doe eerst een $x=$item['menu_1']; en ga dan los op de $x;
*doe eerst een strtolower op de $x en dan laat de i weg in de regex
*laat de .* weg ( heeft in deze regexen geen waarde)
*voeg de regexen samen
dit is in een testje 30% sneller. maar zal sterk afhangen van het aantal items dat weggestreept gaat worden ( door de toegevoegd return). Als je de $x maar 1 keer gebruikt is dit ook niet meer efficiënter ( en maakt de strtolower ook nog maar weinig uit.
dus strtolower en x=$item['menu_1'] helpen alleen als je de regexen 1 voor 1 doet, bijvoorbeeld omdat je ze niet eenvoudig kunt samenvoegen:
preg_match ("/^bed/"...
preg_match ("/bad$/"...
om het qua programmeerwerk eenvoudiger te maken kun je de waardes in een array zetten en ze dan 1 voor 1 doorlopen met een foreach en dan is strpos weer sneller dan preg_match.
of als je alleen 'eenvoudige' patronen hebt
om het sneller te maken:
* plaats achter de $item['title']=''; een return; de rest hoeft toch niet meer gedaan te worden.
*doe eerst een $x=$item['menu_1']; en ga dan los op de $x;
*doe eerst een strtolower op de $x en dan laat de i weg in de regex
*laat de .* weg ( heeft in deze regexen geen waarde)
*voeg de regexen samen
$x=strtolower($item['menu_1']);
if ( preg_match("/(baby|bed|bad)/",$x) ) {
$item['title']='';return;
}
dit is in een testje 30% sneller. maar zal sterk afhangen van het aantal items dat weggestreept gaat worden ( door de toegevoegd return). Als je de $x maar 1 keer gebruikt is dit ook niet meer efficiënter ( en maakt de strtolower ook nog maar weinig uit.
if ( preg_match("/(baby|bed|bad)/",strtolower($item['menu_1']);) ) {
$item['title']='';return;
}
dus strtolower en x=$item['menu_1'] helpen alleen als je de regexen 1 voor 1 doet, bijvoorbeeld omdat je ze niet eenvoudig kunt samenvoegen:
preg_match ("/^bed/"...
preg_match ("/bad$/"...
om het qua programmeerwerk eenvoudiger te maken kun je de waardes in een array zetten en ze dan 1 voor 1 doorlopen met een foreach en dan is strpos weer sneller dan preg_match.
$b=array('bed','bad','baby');
$x=strtolower($item['menu_1']);
foreach ( $b as $k=>$v ) {
if ( preg_match('/'.$v.'/',$x) ) {
#if ( strpos($x,$v) !== false ) {
$item['title']='';return;
}
}
of als je alleen 'eenvoudige' patronen hebt
$b=array('bed','bad','baby');
$c=join('|',$b);
function pixmania_cb(&$item) {
global $c;
$x=strtolower($item['menu_1']);
foreach ( $b as $k=>$v ) {
if ( preg_match('/('.$c.')/',$x) ) {
$item['title']='';return;
}
}


