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
Subscribe to this Thread |
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

$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;
}
}

Subscribe to this Thread |
Power by Simplest Forum - Copyright Ambitionality Software LLC 2008. All rights reserved.

Doneer

Donate $10, $20 or $50! This plugin has cost me countless hours of work, if you use it, please donate a token of your appreciation!