Code : Tout sélectionner
Array ("1/1", "1/2", "2/1")Code : Tout sélectionner
Array ("1/1", "2/1")Code : Tout sélectionner
Array ("5/7")
$inter = array_intersect( $A, $B );
$diff = array_diff( $A, $inter );
if ( $diff == array() ) echo "trouvé";
else echo "non trouvé";
D'où la solution suivante:
/*-----------------------------------------------------*/
//on affiche le résultat en fonction d'un seul critère //
/*-----------------------------------------------------*/
if (!$cfg['ressources_root']) $cfg['ressources_root'] = ".";
$link_file = $cfg['ressources_root'].'/matrix/criteria-practice.xml';
$xml = simplexml_load_file($link_file);//on ouvre le fichier xml
//si les variables ne sont pas vides
if ( ($_POST['cat'] ) and ($_POST['crit'] ) )
{
foreach ($_POST["crit"] as $index=>$idcrit){
$idcat = $_POST["cat"][$index]; //trouve la cat du crit
$params[] ="$idcat/$idcrit" ; //stocke le crit dans son groupe cat
}
//echo "<pre>"; print_r($params);
$practice = null;
//Recherche des practices
foreach($xml->link as $value)
{
//practice en cours
$id_practice = $value->practice['id'];
//ses critères de recherche
$temp = null; //tableau pour ordonner les critères par cat
foreach($value->criteria as $criteria){
$idcat = trim($criteria['idcat']);
$idcrit = trim($criteria['idcrit']);
//construire le tableau de critères
$temp[] = "$idcat/$idcrit";
}
//print_r($temp);
//Rapporochement du tableau $temp et du tableau du $params
if (is_array($temp) && is_array($params)) {
//calculer l'intersection entre les critères
$inter = array_intersect($temp, $params);
//print_r($inter);
//Si les critères $params sont inclus dans $temp alors practice trouvé (différence vide)
$diff = array_diff( $params, $inter);
//print_r($diff);
if ($diff == array()) $practice[] = $id_practice;
}
}
//echo "<pre>"; print_r($practice); echo "</pre>";
//Lecture des practices trouvés
if ( (isset($practice) and count($practice) >0 )) // si le tableau $practice est rempli
{
foreach ($practice as $id){
//fichier qui contient toutes les practices
$practicesFile = $cfg['ressources_root'].'/content/practice/'.$id.'.xml';
$domPractices = new DOMDocument('1.0','UTF-8');
$domPractices->load($practicesFile);
$xpPractices = new DOMXPath($domPractices);
$item_practice = $domPractices->getElementsByTagName('item');
//recherche xml
foreach ($item_practice as $item)
{
foreach ($item->childNodes as $child)
{
if($child->nodeType != XML_ELEMENT_NODE) continue;
if ($child->tagName == 'name')
{
$name = utf8_decode($child->firstChild->nodeValue);
echo "<p>Name=$name</p>" ;
}
if ($child->tagName == 'short_description')
{
$short_description = utf8_decode($child->firstChild->nodeValue);
echo "<p>Description=$short_description</p>" ;
}
}
}
}//fin foreach $practice
} //fin de si $practice trouvé
else
{
echo "<p>There is no practice which corresponds to your request. Please refine your search</p>";
}
}
else
{
echo "<p>Choose your crireria before starting your search</p>";
}
?>
Tu le sérializes avec serialize(), et pour le récupérer, tu le désérializes avec deserialize().Dernière petite question, si je veux garder en mémoire les critères et les catégories cochées, je peux utiliser les variables de sessions. Mais pour cet exemple, vu qu'il s'agit d'un tableau, comment faire ?
if ( (isset($practice) and count($practice) >0 )) // si le tableau $practice est rempli
{
//afficher les critères qui ont été cochés par l'internaute
echo "<div style='margin-left: 10px;'>For this search, you have checked the criteria : ";
$criteriaFile = $cfg['ressources_root'].'/criteria.xml';
$domCriteria = new DOMDocument('1.0','UTF-8');
$domCriteria->load($criteriaFile);
$xpCriteria = new DOMXPath($domCriteria);
foreach ($params as $param) {
$explode = explode ('/',$param);
$categorie = $explode[0];
$critere = $explode[1];
//echo $categorie."/".$critere;
$critXml = $xpCriteria->query('//cat[@id="'.$categorie.'"]/criteria[@id="'.$critere.'"]');
$_SESSION['crit'][] = $critXml;
echo "<strong>".$critXml->item(0)->getAttribute('name')."</strong> - ";
}
echo "</div>";
Mais comment faire pour stocker chaque valeur dans une variable de session, sachant qu'il faut que je fasse la différence entre le critère 1 de a cart 1 et le critere 1 de la cat 3 par exemple. Car tous deux ont le même id. Il faut donc que je stocke la valeur de la cat et du crit.
$_SESSION["cat"] = $_POST["cat"];
$_SESSION["crit"] = $_POST["crit"];
ou
$_SESSION["cat"] = serialize($_POST["cat"]);
$_SESSION["crit"] = serialize($_POST["crit"]);