1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| <?php
function recherche(array $businesses,array $demande){
if(count($businesses)>0 && count($demande)>0){
/*on réorganise toutes les chaines pour avoir des sous-tableaux exploitables au niveau des activités*/
//le tableau des exclusions
$exclusions=array();
if($demande['est_exclus']!=""){
$exclusions=explode(',',$demande['est_exclus']);
}
//Le tableau des demandes => ds
$ds=explode(',',$demande['activite']);
//le tableau des businesses (- les exclusions le cas échéant) => bs
$bs=array();
$i=0;
if(count($exclusions)==0){
foreach($businesses as $business){
$bs[$i]['id']=$business['id'];
$bs[$i]['activites']=explode('/',$business['activite']);
$i++;
}
}
else{
foreach($businesses as $business){
$activites=explode('/',$business['activite']);
$same=array_intersect($activites,$exclusions);
if(empty ($same)){
$bs[$i]['id']=$business['id'];
$bs[$i]['activites']=$activites;
$i++;
}
}
}
//on traite
$matches=array();
foreach($bs as $b){
switch($demande['type_demande']){
case 'est_strictement_egal':
$same = array_intersect($ds, $b['activites']);
if(count($same)==count($ds) && count($ds)==count($b['activites'])){
$matches[]=$b;
}
break;
case 'est_inclus':
$same = array_intersect($ds, $b['activites']);
if(count($same)==count($ds) && count($same)<=count($b['activites'])){
$matches[]=$b;
}
break;
case 'contient_au_moins_une_valeur':
break;
default:
return false;
}
}
return $matches;
}
else{
return false;
}
}
$businesses = array(
0 => array('id' => '100', 'activite' => 'bar/tabac'),
1 => array('id' => '101', 'activite' => 'pmu/bar/tabac/presse'),
2 => array('id' => '102', 'activite' => 'pmu/bar/dancing/karaoke/tabac/presse'),
3 => array('id' => '103', 'activite' => 'pmu/bar/dancing/karaoke/tabac/presse/café'),
4 => array('id' => '104', 'activite' => 'hotel/pmu/bar/dancing/karaoke/tabac/presse')
);
$demande1=array('id' => '12', 'activite' => 'pmu,bar,tabac,presse', 'type_demande' => 'est_inclus', 'est_exclus' => 'café,restaurant,pub,hotel');
//doit retourner
$matches = array(
0 => array('id' => '101', 'activite' => 'pmu/bar/tabac/presse'),
1 => array('id' => '102', 'activite' => 'pmu/bar/dancing/karaoke/tabac/presse')
);
$demande2=array('id' => '12', 'activite' => 'pmu,bar,tabac,presse', 'type_demande' => 'est_strictement_egal', 'est_exclus' => "");
//doit retourner
$matches = array(
0 => array('id' => '101', 'activite' => 'pmu/bar/tabac/presse')
);
$demande3=array('id' => '12', 'activite' => 'pmu,bar,tabac,presse', 'type_demande' => 'contient_au_moins_une_valeur', 'est_exclus' => 'café,restaurant,pub,hotel');
//doit retourner
$matches = array(
0 => array('id' => '100', 'activite' => 'bar/tabac'),
1 => array('id' => '101', 'activite' => 'pmu/bar/tabac/presse'),
2 => array('id' => '102', 'activite' => 'pmu/bar/dancing/karaoke/tabac/presse')
);
echo 'DEMANDE<pre>';
print_r($demande2);
echo '</pre>';
$data=recherche($businesses,$demande2);
if($data!==false){
echo 'MATCHES<pre>';
print_r($data);
echo '</pre>';
} |
Partager