par
béka » 30 juil. 2007, 13:59
Bonjour tout le monde.
J'explique mon problème.
Je dispose de deux fichiers xml de matrice qui permette de faire le lien entre, pour l'un, des critères de recherches et des items et pour l'autre entre des critères (les mêmes) et des auteurs.
Mes deux fichiers xml on la même structure à savoir : (ceci est un exemple)
Code : Tout sélectionner
<root last_insert="2">
<link id="1">
<criteria idcat="1" idcrit="1"/>
<criteria idcat="1" idcrit="2"/>
<criteria idcat="3" idcrit="1"/>
<criteria idcat="3" idcrit="2"/>
<criteria idcat="3" idcrit="3"/>
<criteria idcat="3" idcrit="4"/>
<criteria idcat="3" idcrit="5"/>
<criteria idcat="3" idcrit="6"/>
<contributor id="1"/>
</link>
<link id="2">
<contributor id="2"/>
</link>
</root>
Mes critères sont définis par un fichiers xml et sont répartis dans des catégories.
Par exemple, ainsi :
Code : Tout sélectionner
<root>
<cat id="1" name="New">
<criteria id="1" name="dessin" />
<criteria id="2" name="stade" />
</cat>
<cat id="2" name="Chaine">
<criteria id="1" name="tf1 />
<criteria id="2" name="france2" />
</cat>
</root>
Je voudrais alors créer deux tableaux : l'un (tableau 1) qui contient les couples de critère (catégorie et critère) propre aux auteurs et l'autre (tableau 2) propre aux item.
Ensuite, lorsque ces tableaux sont faits, je voudrais comparer les deux tableaux et si au moins un couple du tableau 2 est présent dans le tableau 1 alors ensuite je fais mon traitement (ici mon traitement sera l'affichage de l'item qui est dans les deux tableaux).
Je sais pas si je m'explique clairement mais voici déjà mon code.
Ceci ne doit pas etre correct je pense car lorsque je fais un print_r() de mon tableau final (practice), il m'affiche tous les id de tous les items.
<?
//on affiche uniquement les practices qui ont les mm critères que le membre du comité
$linkPract_file = '../'.$cfg['ressources_root'].'matrix/criteria-practice.xml';
$xmlPract = simplexml_load_file($linkPract_file);//on ouvre le fichier xml
$linkContr_file = '../'.$cfg['ressources_root'].'matrix/criteria-contributor.xml';
$xmlContr = simplexml_load_file($linkContr_file);//on ouvre le fichier xml
//on construit le tableau des couples cat/crit présents dans le fichier criteria-contributor.xml
foreach ($xmlContr->link as $value){
//$contr = null; //tableau pour ordonner les critères par cat
foreach($value->criteria as $criteria){
$idcat = $criteria['idcat'];
$idcrit = $criteria['idcrit'];
//construire le tableau de critères
$contr[] = "$idcat/$idcrit";
}
}
//echo "<pre>"; print_r($contr); echo "</pre>";
//on construit le tableau des couples cat/crit présents dans le fichier criteria-practice.xml
//$practice = null; //tableau pour ordonner les critères par cat
foreach($xmlPract->link as $value2)
{
$id_practice = $value2->practice['id'];
//echo $id_practice;
foreach($value2->criteria as $criteria2){
$idcat = $criteria2['idcat'];
$idcrit = $criteria2['idcrit'];
//construire le tableau de critères
$pract[] = "$idcat/$idcrit";
}
//echo "practice-criteria :<pre>"; print_r($pract); echo "</pre>";
//Rapprochement du tableau $cront et du tableau du $pract
if (is_array($contr) && is_array($pract)) {
//calculer l'intersection entre les critères
$inter = array_intersect($pract, $contr);
//print_r($inter);
//Si les critères $contr sont inclus dans $pract alors practice trouvé (différence vide)
$diff = array_diff( $pract, $inter);
//print_r($diff);
//if ($diff == array()) {
if (is_array($diff)) {
$practice[] = $id_practice;
}
}
}
echo "<pre>"; print_r($practice); echo "</pre>";
if ( (isset($practice) and count($practice) >0 )) // si le tableau $practice est rempli
{
//ici mon traitement
}
exit;
?>
Si quelqu'un peut m'aider...
Bonjour tout le monde.
J'explique mon problème.
Je dispose de deux fichiers xml de matrice qui permette de faire le lien entre, pour l'un, des critères de recherches et des items et pour l'autre entre des critères (les mêmes) et des auteurs.
Mes deux fichiers xml on la même structure à savoir : (ceci est un exemple)
[code]<root last_insert="2">
<link id="1">
<criteria idcat="1" idcrit="1"/>
<criteria idcat="1" idcrit="2"/>
<criteria idcat="3" idcrit="1"/>
<criteria idcat="3" idcrit="2"/>
<criteria idcat="3" idcrit="3"/>
<criteria idcat="3" idcrit="4"/>
<criteria idcat="3" idcrit="5"/>
<criteria idcat="3" idcrit="6"/>
<contributor id="1"/>
</link>
<link id="2">
<contributor id="2"/>
</link>
</root>[/code]
Mes critères sont définis par un fichiers xml et sont répartis dans des catégories.
Par exemple, ainsi :
[code]
<root>
<cat id="1" name="New">
<criteria id="1" name="dessin" />
<criteria id="2" name="stade" />
</cat>
<cat id="2" name="Chaine">
<criteria id="1" name="tf1 />
<criteria id="2" name="france2" />
</cat>
</root>
[/code]
Je voudrais alors créer deux tableaux : l'un (tableau 1) qui contient les couples de critère (catégorie et critère) propre aux auteurs et l'autre (tableau 2) propre aux item.
Ensuite, lorsque ces tableaux sont faits, je voudrais comparer les deux tableaux et si au moins un couple du tableau 2 est présent dans le tableau 1 alors ensuite je fais mon traitement (ici mon traitement sera l'affichage de l'item qui est dans les deux tableaux).
Je sais pas si je m'explique clairement mais voici déjà mon code.
Ceci ne doit pas etre correct je pense car lorsque je fais un print_r() de mon tableau final (practice), il m'affiche tous les id de tous les items.
[php]
<?
//on affiche uniquement les practices qui ont les mm critères que le membre du comité
$linkPract_file = '../'.$cfg['ressources_root'].'matrix/criteria-practice.xml';
$xmlPract = simplexml_load_file($linkPract_file);//on ouvre le fichier xml
$linkContr_file = '../'.$cfg['ressources_root'].'matrix/criteria-contributor.xml';
$xmlContr = simplexml_load_file($linkContr_file);//on ouvre le fichier xml
//on construit le tableau des couples cat/crit présents dans le fichier criteria-contributor.xml
foreach ($xmlContr->link as $value){
//$contr = null; //tableau pour ordonner les critères par cat
foreach($value->criteria as $criteria){
$idcat = $criteria['idcat'];
$idcrit = $criteria['idcrit'];
//construire le tableau de critères
$contr[] = "$idcat/$idcrit";
}
}
//echo "<pre>"; print_r($contr); echo "</pre>";
//on construit le tableau des couples cat/crit présents dans le fichier criteria-practice.xml
//$practice = null; //tableau pour ordonner les critères par cat
foreach($xmlPract->link as $value2)
{
$id_practice = $value2->practice['id'];
//echo $id_practice;
foreach($value2->criteria as $criteria2){
$idcat = $criteria2['idcat'];
$idcrit = $criteria2['idcrit'];
//construire le tableau de critères
$pract[] = "$idcat/$idcrit";
}
//echo "practice-criteria :<pre>"; print_r($pract); echo "</pre>";
//Rapprochement du tableau $cront et du tableau du $pract
if (is_array($contr) && is_array($pract)) {
//calculer l'intersection entre les critères
$inter = array_intersect($pract, $contr);
//print_r($inter);
//Si les critères $contr sont inclus dans $pract alors practice trouvé (différence vide)
$diff = array_diff( $pract, $inter);
//print_r($diff);
//if ($diff == array()) {
if (is_array($diff)) {
$practice[] = $id_practice;
}
}
}
echo "<pre>"; print_r($practice); echo "</pre>";
if ( (isset($practice) and count($practice) >0 )) // si le tableau $practice est rempli
{
//ici mon traitement
}
exit;
?>
Si quelqu'un peut m'aider...
[/php]