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 :

Organiser une table sans répétition


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Organiser une table sans répétition
    Bonjour à tous !!

    Je m'en remet une nouvelle fois à vous car je bloque totalement sur un problème d'organisation d'une table par un script PHP.

    Je fais un programme d'organisation de groupe pour une activité (de la simulation de chute libre en soufflerie), et je suis entrain de faire la partie servant à organiser les groupes pour organiser le passage dans la soufflerie.

    Voici ce que cela donne :



    Et voici l'organisation de ma base de donnée :



    Il faut absolument qu'il n'y ai pas deux fois la meme personne qui passe à la suite (il y a un debriefing à la fin de chaque vol), et, dans l'idéal, le groupe devrait se former de la manière la plus intelligente possible, espacer quasi également les vols, de manière à offrir un temps de repos optimal et permettre à tout le monde de passer le plus régulièrement possible.

    Pour etre plus précis, la meilleure organisation pour le groupe présenté ci dessus serait la suivante :



    Je ne vois pas comment réaliser un tri de cette manière, auriez vous des idées ou des fonctions spécifiques à me conseiller ?

    Je vous remercie par avance.

    Pierre CIHOLAS

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Bonjour,

    pê en rajoutant un timestamp pour l'heure de passage.

    Pour savoir qui doit passer, tu sélectionnes l'id du groupe qui est passé depuis le plus longtemps, et pour ce groupe tu sélectionnes le membre qui est passé depuis le plus longtemps.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Le timestamp sert déjà à la journalisation.

    Le problème est peut etre plus simple exposé comme ceci :

    Comment réorganiser cet array :
    Array(1, 1, 2, 2, 3, 3, 3, 3);
    En, par exemple :
    Array(1, 3, 2, 3, 1, 3, 2, 3);

    C'est à dire en espacant au maximum chaque numéro identique.
    Si j'arrive à faire ca, mon problème est résolu.

    Merci d'avance.

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    un truc du genre ( zut ca répond pas vraiment à la réponse que tu attendais)

    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
    <?php
    $a =array (1,3,1,2,2,2,3,2,3,1,3,2);
     
    $b = array(0=>array());
    $c = array();
     
        for ( $i = 0 ; $i < count($a); $i++){
     
            if(!isset($c[$a[$i]])){       
                $c[$a[$i]] = 0;
            }
            if(!array_key_exists($a[$i] , $b[$c[$a[$i]]] )){
     
                $b[$c[$a[$i]]][$a[$i]] = $a[$i];
     
            }
            else {
            $c[$a[$i]]++;
            $b[$c[$a[$i]]][$a[$i]] = $a[$i];
     
        }
     
    }
     
    print_r($b);
    ?>
    surement optimisation mais déjà y'a un algo qui fonctionne
    Conception / Dev

  5. #5
    Membre éprouvé Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Points : 1 019
    Points
    1 019
    Par défaut
    Salut

    Peut-on voir juste ta requête de base stp ?
    Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
    C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    ...

    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
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
    $l =Array(1, 1, 3, 2, 2, 4, 5,  5, 3, 3,3, 1, 4,1, 5,1, 1,  3, 3, 3);
     
    function orderListe($arr,$p,$s){
     
        if(count($arr)>0){
            $e=array_count_values ($arr);
            arsort($e);
     
            $index=0;
            $stopOne = true;
            foreach ($e as $k => $v){
                for ($i=0;$i< $v ;$i++){
                    $d[] = $k  ;     
                }
     
                if(!isset($s[0]) && $stopOne == true ){
                    $index = 0 ;
                    $stopOne = false;
                    $p     = $v;
     
                }
                else if($v>$index && $p != $v && $stopOne == true  &&  isset($s[0]) &&  $s[count($s)-1]!=$k   ){   
                    $index = $k;
                    $stopOne = false;
                    $p     = $v;
     
                }
     
            }
     
            $key= array_search($index,$d);
     
     
            if( isset($d[$key])  ){
                $s[] = $d[$key];
                unset($d[$key]);      
                return orderListe($d,$p,$s);
            }
        }
        else{
        return($s);
        }
     
    }
    $liste=orderListe($l,0,array());
     
      for ($i=0;$i<count($liste);$i++){
     
        echo $liste[$i].",";
      }
      echo "<br/>";
    ?>
    Conception / Dev

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    je remonte le topique, l’algorithme est intéressent, je suis curieux de divers tests et solutions...

    ( bon mon dernier post repose uniquement sur une logique mathématique )

    j'ajouterais quand même si possible un paramètre robot / humain pour être sur de ne pas laisser totalement la machine faire le planning, mais la je sais pas comment faire..

    avis aux amateurs
    Conception / Dev

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2012
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Salut !!

    Le script marche impec, je vais prendre le temps de le lire et de le comprendre instruction par instruction car il utilise certaines fonctions que je n'ai pas encore eu à utiliser.

    Effectivement, j'ai prévu une case pour activer/désactiver la réorganisation automatique du groupe, cela dit, l'organisation automatique se fait uniquement lors de l'ajout d'une nouvelle personne au groupe, donc il est possible de laisse l'organisation auto sur "on" et apporter des modifs une fois tous les participants ajoutés.

    En tout cas merci beaucoup pour ce petit script qui m’ôte une belle épine du pied !

Discussions similaires

  1. Réponses: 7
    Dernier message: 17/07/2014, 12h06
  2. [MySQL] Requête SQL selectionner l'id d'une table sans clef commune
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 36
    Dernier message: 03/02/2006, 09h27
  3. Mise à jour d'une table sans avoir la table
    Par Cablan dans le forum Access
    Réponses: 9
    Dernier message: 26/12/2005, 11h24
  4. exporter une table sans le nom de colonnes ?
    Par vuldos dans le forum Access
    Réponses: 13
    Dernier message: 11/10/2004, 19h56
  5. Lister le contenu d'une table sans connaitre ses champs
    Par Google.be dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 30/03/2004, 15h23

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