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 :

Lister les combinaisons régulières [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Lister les combinaisons régulières
    Bonjour à tous,
    J'ai un algorithme qui gère des mutations de personnel (tu es en poste 4 et tu pars en 9) etc.
    Une fois que l'algorithme a créé les différentes mutations, j'aimerai supprimer les doublons.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    2-1 / 1-2
    1-2 / 2-1 (doublon)
    2-3 / 3-4 / 4-2
    3-4 / 4-2 / 2-3 (doublon)
    4-2 / 2-3 / 3-4 (doublon)
    4-5 / 5-4
    5-4 / 4-5 (doublon)
    Il faut que je prenne garde à ne pas faire toutes les possibilités mais uniquement celles qui se suivent !

    J'ai bien essayé de faire des boucles dans des boucles mais j'ai bien de la peine.
    Est ce que quelqu'un aurait une idée ???

    Merci d'avance

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Ben la meilleure solution c'est qu'avant de créer un élément, tu vérifies que celui n'existe pas déjà...

    Mais il nous faudrait que tu nous montres un bout de code pour t'aider davantage..
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Hello Spartacusply

    Ma base de données wishes ressemble à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    id - request id - now - wish
    1 - 1 - 1 - 2
    2 - 1 - 1 - 3
    3 - 3 - 3 - 2
    4 - 2 - 2 - 1
    5 - 4 - 4 - 5
    6 - 5 - 5 - 4
    request id car un utilisateur peut faire une demande de mutation à plusieurs choix
    now étant l'emplacement actuel et wish le nouveau bureau qu'il demande

    Mon code est le suivant :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    $connect0 = 'SELECT * FROM wishes';
    $result0 = mysql_query($connect0) or die('error : '.mysql_error());
    $nbr_comb = mysql_num_rows($result0);
    while($row0 = mysql_fetch_array($result0)) {
    	//purge des variables
    	$list = '';
    	$id_deja_ut = array();
    	$stopchain = $row0['now'];
    	$reprise = $row0['wish'];
    	//rempli le tabeau des id deja utilisés	
    	array_push($id_deja_ut, $row0['id']);
    	//première combinaison
    	$list .= $row0['now'].'-'.$row0['wish'].' (id '.$id_deja_ut[0].') ';
    	//combinaisons suivantes
    	for(
    		$i=1,$r=1; 
    		$i<$nbr_comb; 
    		$i++,$r=$i
    	){
    		if($reprise != $stopchain){
     
    			//définition de la variable dans la requete sql
    			$excl = implode(",", $id_deja_ut);
    			//nombre de resultats possibles
    			$nbr_res = mysql_num_rows(mysql_query('SELECT * FROM wishes WHERE wishes.now = '.$reprise.' AND wishes.id NOT IN ('.$excl.')'));
    			if($nbr_res > 0){
    			$list .= ' / ';
    			$r = mysql_fetch_array(mysql_query('SELECT * FROM wishes WHERE wishes.now = '.$reprise.' AND wishes.id NOT IN ('.$excl.')'));
    			array_push($id_deja_ut, $r['id']);
    			$list .= $r['now'].'-'.$r['wish'].' (id '.$id_deja_ut[$i].')';
    			$reprise = $r['wish'];
    			$combinaison = implode(",", $id_deja_ut);
    			}
    		}
    	} 
     
     
    	//supprimer les boucles qui ne finissent pas correctement
    	if($reprise == $stopchain){
    		echo $list.' comb : '.$combinaison.'<br>';
    		echo ''.$var_possibles.'<br><br>';
    	}else{
    		//echo $list.' ERROR <br>';
    	}
    }
    L'idée est de créer pour chaque mutation, une suite la plus longue possible avec la condition que le 1er chiffre et le dernier de la ligne soit le même (pour que chaque bureau conserve le même nombre de collaborateurs).
    Mon script fonctionne en l'état. Malheureusement, il n'arrive pas a masquer les doublons comme expliqué dans mon premier post.
    Qu'en penses-tu ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Points : 18
    Points
    18
    Par défaut
    Ben voilà,

    En y repensant au calme, la solution m'est venue tout simplement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $falsecomb = '';
    for($i=1;$i < $nbr_depl+1;$i++){
    	$falsecomb .= substr($combinaison, $i*2).','.substr($combinaison, 0, ($i*2)-1).' + ';
    }
    Cela me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    combinaison : 2,3,4 // exclure : 3,4,2 + 4,2,3 +

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/06/2013, 11h42
  2. Réponses: 5
    Dernier message: 17/01/2013, 11h32
  3. Code pour lister toutes les combinaisons
    Par tontonced dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 28/11/2011, 15h03
  4. Lister toutes les combinaisons d'éléments
    Par Loceka dans le forum Prolog
    Réponses: 5
    Dernier message: 15/04/2007, 00h11
  5. Lister toutes les combinaisons...
    Par monstroplante dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/11/2005, 21h10

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