IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Comment comparer le contenu de deux tableaux


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 56
    Points : 42
    Points
    42
    Par défaut Comment comparer le contenu de deux tableaux
    Salut;

    Tout d'abord je vais expliquer la structure de mes tableaux:
    Le premier tableau contient tout les liens visités par l'utilisateur de mon site(chaque lien dans un case), donc le contenu est variable et je le récupère en interrogeant ma BDD.
    Le deuxième est déclaré et fixé par moi même (il contient aussi des liens de mon site en ordre)
    Le but de la comparaison est de vérifier si l'utilisateur a progressé dans la lecture d'une façon séquentielle (puisque le site est un site éducatif).
    donc ma question concerne la fonction que je dois utiliser? La fonction ARRAY_DIFF ne fait pas l'affaire puisque elle fait la différence et garde le résultat dans un autre tableau!
    J'espère que mes explications sont claires pour que vous pouviez m'aider!
    Merci d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Non, c'est pas très clair.
    En gros, tu as un modèle du genre
    0=>lien1
    1=>lien2
    2=>lien3
    3=>lien4

    et tu as un tableau d'un client web du genre
    0=>lien3
    1=>lien2
    2=>lien1
    3=>lien4

    Et ensuite ? tu veux quoi comme info, je ne vois pas ? Les indices de ton premier tableau ? Dans ce cas, vas voir du côté de array_keys...

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu vas devoir passer par une boucle foreach et un algorithme maison a l'interieur.
    L'algo pourrait, selon ce que tu veux faire exactement, par exemple, prendre le premier élément du tableau des visites, chercher la position du même élément dans ton tableau repère, et ensuite contrôler élément par élement jusqu'ou ils sont identiques.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 56
    Points : 42
    Points
    42
    Par défaut
    Il s'agit d'une comparaison de contenu, je m'explique:

    Sur mon site je peux garder la trace de l'apprenant qui lit les cours, tout les liens sont sauvegardés dans une table, donc je peux les récupérer grâce une simple requête SQL, et le résultat sera stocké dans un tableau, disant TAB1. c'est clair jusqu'à maintenant!

    Dans le but de savoir si cet apprenant suit le cours dans l'ordre comme est créé le site, je suis obligée d'analyser sa trace? c'est vrai ou pas?

    Pour ce faire, j'ai pensé à créé un tableau qui contient les noms des cours en ordre pour comparer si l'apprenant a vraiment respecté l'ordre ou pas? Disant TAB2

    Et je déclare un troisième tableau TAB3, pour sauvegardé le résultat de la comparaison.


    Problème:
    le site contient 5 cours, chaque cours contient 4 titres, ça veut dire que dans la TAB1 le noms du cours sera répété autant de fois que l’apprenant navigue dans ce cours! comment éviter de boucler dans la même case qui contient le même nom du cours en même temps faire la comparaison et attribuer les valeurs au TAB3?

    PS: si vous m'avez bien compris, TAB2 contiendra 5 cases et même chose pour TAB3!

    J'espère que c'est assez clair :/

  5. #5
    Membre averti Avatar de shell13010
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2008
    Messages : 281
    Points : 314
    Points
    314
    Par défaut
    Tu peux nous montrer la partie du code ou tu bloques?

    Sinon j'ai du mal a comprendre le fonctionnement, car si vous voulez savoir si les cours on biens étais suivi dans l'ordre?

    Alors le meilleurs moyen serait cas chaque cours, vous proposez a vos membres un exercices (questionnaire...).

    Donc tant que le membre n'as pas valider l'exercice alors il ne pourrait pas aller au cours suivant...

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 56
    Points : 42
    Points
    42
    Par défaut
    le code est encore sous format (papier/crayon)!
    Je peux faire ce genre de questionnaire car je pourrai limité la liberté de navigation dans le cours!
    Mon but n'est de trouvé que le membre a vraiment suivi les cours en ordre, je dois le faire pour voir comment il procède dans sa lecture et lui attribué une caractéristique qui définit son style d'apprentissage, par exemple: séquentiel s'il suit le cours en ordre, global sinon!
    claire??

  7. #7
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Au lieu de faire beaucoup de phrases, mets nous tes 3 tableaux avec des EXEMPLES de ce que tu veux obtenir dans le 3ème.
    Je ne suis pas du tout sûre que ce soit clair pour toi... Pas de blabla, 3 tableaux;

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 56
    Points : 42
    Points
    42
    Par défaut
    Donc j'ai réglé quelques problèmes avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    $coursOrdre = array("la recursivité", "les pointeurs","les listes" ,"les piles et les files",  "les arbres");
    $i=1;
        mysql_connect("localhost","root","");
    	mysql_select_db("bdd");
    		$res=mysql_query("SELECT DISTINCT nomcour FROM trace WHERE pseudo= '$pseudo' ORDER BY heurvisite") 
    		or die(mysql_error());
        while($rep=mysql_fetch_array($res))
        {
    ?>
    </tr>
    <td width="12%">
    <?php 
    echo $rep['nomcour']. '<br/>';
     
    foreach ($rep as $y) {
                         if ($y==$coursOrdre[i]) {echo 'bingo';} 
    					 else echo 'pfff'; 
    					 $i++ ;
    					 echo '<br/>';
                                         }
         }				  
    mysql_close();
    ?>
    erreur déclarée sur la ligne du test (if) : Use of undefined constant i - assumed 'i'

    Merci à vous tous d'avoir supporté cette ratatouille :p

  9. #9
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    ben là, c'est juste que $i, c'est pas i.

    Là ton code, il va faire ça.
    Si le client retourne 3-2-1-4
    Tu vas lui dire bravo une fois, parce que le 2 est bien placé ? Ca n'a pas grand sens si ?

    Toi tu voudrais plutôt savoir si l'on a des séquences consécutives dans le tableau et combien ?
    Que dirais tu de ce modèle qui ne s'intéresse qu'à ton tableau client ?
    C'est une façon de faire, il y en a d'autres...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    //combien de séquence consécutive ?
    $consecutif=0;
    //ma valeur de gauche dans le tableau
    $exCur=0;
     
    foreach($tabClient as $idSequence){
     
    $cur=$idSequence
    if($cur==($exCur+1) && $exCur>0){
    $consecutif++;
    }
    //on stocke en mémoire pour le prochain tour
    $exCur=$idSequence;
    }
    Après, si le client web a 3 consécutifs sur 5, tu lui mets une note "de cohérence" en pourcentage...

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 56
    Points : 42
    Points
    42
    Par défaut
    Non j'ai pas compris ce que tu as fait dans ce code!
    je vois pas comment tu as comparé "le contenu des deux tableaux"!
    Mon but est de vérifier si dans le tableau $rep on a le même ordre comme dans le tableau $traceOrdre, si c'est le cas j'exécute des calculs particuliers, sinon j’exécute d'autres calculs!
    NB: je rappelle que $rep est le résultat d'une requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mysql_connect("localhost","root","");
    	mysql_select_db("bdd");
    		$res=mysql_query("SELECT DISTINCT nomcour FROM trace WHERE pseudo= '$pseudo' ORDER BY heurvisite") 
    		or die(mysql_error());
        while $rep=mysql_fetch_array($res)
    et $traceOrdre est le tableau que j'ai crée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $traceOrdre = array();
    $tarceOrdre[0]='la recursivite';
    $traceOrdre[1]= 'les pointeurs' ;
    $tarceOrdre[2]= 'les listes' ;
    $tarceOrdre[3]= 'les piles et les files' ;
    $tarceOrdre[4]= 'les arbres' ;
    Merci pour vos orientations

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 56
    Points : 42
    Points
    42
    Par défaut
    Voici ce que j'ai fait mais ça me retourne toujours la valeurs de else, comment je peux corriger le test? je crois que j'ai une erreur dans les instructions de comparaison!! :/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     <?php
    mysql_connect("localhost","root","");
    mysql_select_db("bdd");
    $res=mysql_query("SELECT DISTINCT nomcour FROM trace WHERE pseudo= '$pseudo' ORDER BY heurvisite")  
            or die(mysql_error());
    while ($rep=mysql_fetch_row($res)){
            $row = $rep[0];
    	echo $row. '<br/>';
     
    if (($row =='recursivite') and 
        ($row == 'les pointeurs') and 
        ($row == 'les listes') and 
        ($row == 'les piles et les files') and 
        ($row == 'les arbres')) {echo 'sequentiel';}
    else echo 'global';	
    echo '<br/>';
    }
    mysql_close();
    ?>
    Je vous remercie d'avance pour vos corrections, j'en ai vraiment très besoin

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
    mysql_connect("localhost","root","");
    mysql_select_db("bdd");
    $sql = "SELECT DISTINCT nomcour FROM trace WHERE pseudo= '{$pseudo}' ORDER BY heurvisite";
    $res = mysql_query($sql) or die(mysql_error());
     
    $data = array();
    while ($row = mysql_fetch_assoc($res))
    {
        $data[] = $row['nomcour'];
    }
     
    $model = array(
        'la recursivite',
        'les pointeurs', 
        'les listes',
        'les piles et les files',
        'les arbres'
    );
     
    $diff = array_diff_assoc($model, $data);
     
    if (empty($diff))
    {
        echo 'séquentiel';
    }
    else
    {
     
    }
    ?>
    Et la doc pour array_diff_assoc()

  13. #13
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 56
    Points : 42
    Points
    42
    Par défaut
    Je vous remercie tous pour vos réponse
    résolu grace à l'aide d'un ami, voici ce qu'il m'a conseillé à faire, peut être que ça servira à quelqu'un un jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
        $traceOrdre = array();
        $traceOrdre2 = array();
        $traceOrdre[0]='la recursivite';
        $traceOrdre[1]= 'les pointeurs' ;
        $traceOrdre[2]= 'les listes' ;
        $traceOrdre[3]= 'les piles et files' ;
        $traceOrdre[4]= 'les arbres' ;
        mysql_connect("localhost","root","");
        mysql_select_db("bdd");
        $res=mysql_query("SELECT DISTINCT nomcour FROM trace WHERE        pseudo= '$pseudo' ORDER BY heurvisite")
             or die(mysql_error());		 
        $i=0;
        $traceOrdre2 = array();
        while($rep=mysql_fetch_array($res))
        {
            $traceOrdre2[$i]=$rep['nomcour'];
    		echo '<pre>';
    		print_r($traceOrdre2); 
    		echo '</pre>';
    		$i++;
        }
    	if (($traceOrdre2[0] == $traceOrdre[0]) and 
    	    ($traceOrdre2[1] == $traceOrdre[1]) and 
    	    ($traceOrdre2[2] == $traceOrdre[2]) and 
    	    ($traceOrdre2[3] == $traceOrdre[3]) and 
    	    ($traceOrdre2[4] == $traceOrdre[4])) {
    		echo 'sequentiel';  } 
    		else echo 'global';	echo '<br/>';
    Merci encore une fois les amis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [requête sql]comment comparer des enregistrements de deux tables
    Par DSabah dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 01/06/2007, 16h12
  2. Comparer le contenu de deux requêtes
    Par Floch dans le forum Access
    Réponses: 2
    Dernier message: 04/05/2006, 12h43
  3. comparer le contenu de deux tables?
    Par sessime dans le forum Requêtes
    Réponses: 5
    Dernier message: 07/03/2006, 15h05
  4. Comparer le contenu de deux vecteurs
    Par misou83 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 20/07/2005, 18h17
  5. Comment comparer le contenu de 2 fichiers ?
    Par steph_1 dans le forum Langage
    Réponses: 4
    Dernier message: 17/06/2005, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo