Aller au contenu

Comparer et exclure des données entre 2 array


Sujets conseillés

Posté (modifié)

Bonjour,

J'ai plusieurs menus sur ma page, chaque menu est regroupé par catégorie.

J'ai une premiere requete mysql dont le résultat est mis dans un tableau, contenant le top 10 des sites visités.

Ensuite, j'ai une autre requête qui met le résultat dans un second tableau et qui contient tous les sites visités, sans distinction.

Je souhaite, que si le site est présent dans le top 10 (tableau 1), il ne soit pas affiché lorsque je liste le contenu du tableau 2.

<?php
$tab=array();
$tab1=array();

//On crée un premier tableau
$sql=mysql_query('SELECT id_du_vote FROM NoteGlobaleVotes ORDER BY note DESC LIMIT 10');

while($res = mysql_fetch_array($sql))
{
array_push($tab,array('NomSiteJeux' => $res['id_du_vote']));
}

//On cree le second tableau
$requete = mysql_query('SELECT NomSiteJeux, Categorie FROM FicheSitesJeux WHERE Taille = "Long" GROUP BY NomSiteJeux') or die ('Erreur: '.mysql_error());

while($donnees = mysql_fetch_array ($requete))
{
array_push($tab1,array('NomSiteJeux' => $donnees['NomSiteJeux'], 'Categorie' => $donnees['Categorie']));
}

print_r($tab);
echo'<p>';
print_r($tab1);
echo'<p>';

//On affiche les données
for($i = 0; $i < count($tab1); $i++)
{
//La je demande de ne sélectionner que les éléments du tableau ayant pour catégorie Multi-Jeux et
if($tab1[$i]["Categorie"] == "Multi-Jeux" AND !in_array(''.$tab1[$i]["NomSiteJeux"].'', $tab))
{
echo'<li><a href="/jeux-en-ligne-'.$tab1[$i]["NomSiteJeux"].'.html">'.$tab1[$i]["NomSiteJeux"].'</a></li>';
}
}
?>

print_r de $tab retourne:

Array ( 
[0] => Array ( [NomSiteJeux] => Toilokdo )
[1] => Array ( [NomSiteJeux] => Testimania )
[2] => Array ( [NomSiteJeux] => Marre ) )

print_r de $tab1 retourne:

Array ( 
[0] => Array ( [NomSiteJeux] => Find-jeux [Categorie] => Multi-Jeux )
[1] => Array ( [NomSiteJeux] => Kadokado [Categorie] => Fun )
[2] => Array ( [NomSiteJeux] => Marre [Categorie] => Grattage )
[3] => Array ( [NomSiteJeux] => Testimania [Categorie] => Multi-Jeux )
[4] => Array ( [NomSiteJeux] => Toilokdo [Categorie] => Top ) )

Logiquement, je voudrais que cela retourne:

Find-jeux

En effet, c'est la seule entrée non présentes dans le premier tableau et ayant pour catégorie Multi-Jeux.

Mais cela me retourne en réalité:

Find-jeux
Testimania

C'est comme si la condition !in_array etait ignorée !

Pourtant Testimania est présent dans le premier tableau...

Ou est l'erreur et comment y remédier?

Merci pour votre aide :)

Jo

Modifié par joboy84
Pour les longs codes, nous utilisons la balise [codebox] elle permet d'ajouter un scroll au cadre ;) (Olitax)
Posté

Finalement j'ai fais des boucles..

<?php
for($i = 0; $i < count($tab1); $i++)
{
// condition de la 1ere boucle : tu cherches multi jeux
if($tab1[$i]["Categorie"] == "Multi-Jeux")
{
// booleen qui détermine la condition d'arret pour chercher dans le tableau tab
$trouve = 0;
// 2eme boucle : on cherche dans tab
for($j = 0; $j < count($tab); $j++) {
// condition de la 2eme boucle : on cherche si on trouve le nom du site dans tab
if ($tab1[$i]["NomSiteJeux"] == $tab[$j]["NomSiteJeux"])
{
// on a trouvé donc on sort de la boucle
$trouve = 1;
break;
}
}
// si on n'a pas trouvé on affiche
if ($trouve==0) {
echo'<li><a href="/jeux-en-ligne-'.$tab1[$i]["NomSiteJeux"].'.html">'.$tab1[$i]["NomSiteJeux"].'</a></li>';
}
}
}
?>

Merci tout de meme à ceux qui ont voulu aider :)

Bonne continuation ;)

Posté

Le array_in je peut pas fonctionner parce que le tableau n'est pas "plat" (il ne contient pas directement les noms, mais des tableaux qui eux contiennent les noms).

Plusieurs options:

- comme tu ne stockes qu'une seule information par jeu dans le premier tableau, le mettre à plat

- faire une boucle pour aller chercher au deuxième niveau

- faire l'exclusion au niveau de la deuxième requête SQL en ajoutant un AND NomSiteJeux NOT IN (recopier_premier_select) dans ta requête (à la fin de ta clause WHERE).

Jacques.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...