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 :

[Tableaux] Aide pour un algorithme sur les tableaux


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut [Tableaux] Aide pour un algorithme sur les tableaux
    Bonjour,
    j'ai un probléme que j'ai essayé a résoudre toute l'aprés-midi mais sans solution d'ailleurs c'est normale vu mes limites dans l'algorithmique

    mon probléme est le suivant :

    j'ai d'abord 2 tableaux (ID1 et ID2)

    valeurs de ID1 : 2 , 1 , 4 , 3 , 5
    valeurs de ID2 : 6 , 7 , 8 , 9 , 10

    j'ai un autre tableau Ch1 :

    valeurs de Ch1 : 2- , 1- , 2-4- , 2-3 , 2-3-5

    et je veux créer un tableau Ch2 à partir de Ch1 en utilisant (ID1 et ID2) pour obtenir un tableau du genre :

    valeurs de Ch2 : 6- , 7- , 6-8- , 6-9 , 6-9-10

    (2 du ID1 a été remplacée par 6 du ID2)
    (1 du ID1 a été remplacée par 7 du ID2)
    (4 du ID1 a été remplacée par 8 du ID2)
    (3 du ID1 a été remplacée par 9 du ID2)
    (5 du ID1 a été remplacée par 10 du ID2)

    j'espere que c'est claire et j'espere trouver de l'aide comme d'habitude sur ce forum

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    août 2002
    Messages
    1 059
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2002
    Messages : 1 059
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    Il y a certainement plus optimisé, mais cela fonctionne :
    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
    <?php
      $id1 = array(2 , 1 , 4 , 3 , 5);
      $id2 = array(6 , 7 , 8 , 9 , 10);
     
      $ch1 = array('2-' , '1-' , '2-4-' , '2-3' , '2-3-5');
      $ch2 = array();
     
      //-- on examine chacun des éléments de ch1 ------------------------------
      foreach ($ch1 as $cherche)
      {
        //-- on isole les valeur d'un élément ---------------------------------
        $tableau = explode('-', $cherche);
        foreach ($tableau as $valeurAChercher)
        {
          if ($valeurAChercher != '')
          {
          	//-- tableau des valeurs à remplacer dans un élément de id1 -------
            $aRemplacer[] = $valeurAChercher;
            //-- tableau des valeurs de remplacement cherchées dans id2 -------
            $remplacerPar[] = $id2[array_search($valeurAChercher, $id1)];
          }
        }
        //-- remplacement des valeurs et stockage dans ch2 --------------------
        $ch2[] = str_replace($aRemplacer, $remplacerPar, $cherche);
      }
      echo 'origine (tableau ch1)  => ';
      print_r($ch1);
      echo '<br>résultat (tableau ch2) => ';
      print_r($ch2);
    ?>
    Peut-être que l'utilisation des regexp serait préférable, mais je ne maîtrise pas.

  3. #3
    Membre du Club
    Inscrit en
    mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    Salut,
    jeca merci pour ta réponse mais je l'ai tésté et ca marche pas
    le résultat été :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    origine (tableau ch1) => Array ( [0] => 2- [1] => 1- [2] => 2-4- [3] => 2-3 [4] => 2-3-5 ) 
    résultat (tableau ch2) => Array ( [0] => 69999- [1] => 36690- [2] => 69999-36697- [3] => 69999-9669 [4] => 69999-9669-99 )

  4. #4
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Attention, algorithmique très complexe :
    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
    /*
    Vous auriez du poster le code d'instanciation des tableaux, merci jeca !
    */
     
    $id1 = array(2 , 1 , 4 , 3 , 5);
    $id2 = array(6 , 7 , 8 , 9 , 10);
    $ch1 = array('2-' , '1-' , '2-4-' , '2-3' , '2-3-5');
     
    $ch2 = str_replace($id1, $id2, $ch1); 
     
    print_r( $ch2);
    /*
    Array
    (
        [] => 6-
        [0] => 6-
        [1] => 7-
        [2] => 6-8-
        [3] => 6-9
        [4] => 6-9-10
    )
    
    */
    Et oui, si vous aviez lu la documentation de str_replace(), vous sauriez qu'on peut y utiliser des tableaux !
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  5. #5
    Membre du Club
    Inscrit en
    mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    merci is_null ca marche pour l'exemple que j'ai mis, mais lorsque je change $id2 par $id2 = array(29 , 30 , 31 , 32 , 33);
    le resultat n'est pas bon

    il m'affiche : Array ( [0] => 29- [1] => 320- [2] => 29-321- [3] => 29-32- [4] => 29-32-33- )

  6. #6
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    D'accord mais plus de précision dans les question à l'avenir.
    Example : est-ce possible d'utiliser str_replace avec des tableaux de manières non-recursive (que la recherche stoppe après le première remplacement effectué).

    Voici une solution :
    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
     
    $id1 = array(2 , 1 , 4 , 3 , 5);
    $id2 = array(6 , 7 , 8 , 9 , 10);
    $ch1 = array('2-' , '1-' , '2-4-' , '2-3' , '2-3-5');
    $ch2 = array();
     
    function remplacebien ($id1, $id2, $ch1) {
      $aReplaced = array();
      foreach ($ch1 as $kCh1 => $vCh1) {
        $aTmpCh1 = explode('-', $vCh1);
        $aTmpCh2 = array();
        foreach ( $aTmpCh1 as $kTmpCh1 => $vTmpCh1 ) {
          foreach ($id1 as $kId1 => $vId1) {
            if ($vId1 == $vTmpCh1) {
              $aTmpCh2[] = $id2[$kId1];
              break 1;
            }
          }
        }
        $ch2[$kCh1] = implode('-', $aTmpCh2);
      }
      return $ch2;
    }
    print_r(remplacebien ($id1, $id2, $ch1));
    /*
    Array
    (
        [0] => 6
        [1] => 7
        [2] => 6-8
        [3] => 6-9
        [4] => 6-9-10
    )
    */
    $id2 = array(29 , 30 , 31 , 32 , 33);
    print_r(remplacebien ($id1, $id2, $ch1));
    /*
    Array
    (
        [0] => 29
        [1] => 30
        [2] => 29-31
        [3] => 29-32
        [4] => 29-32-33
    )
    */
    PS : on peut faire quelque chose de plus rigolo avec l'argument int count, mais je voulais un minimum de variables, à vous de jouer !
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  7. #7
    Membre du Club
    Inscrit en
    mars 2006
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 147
    Points : 62
    Points
    62
    Par défaut
    merci is_null ça marche trop bien

  8. #8
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Je t'en prie.
    Mais si tu m'avais demandé, je t'aurais dit que le code qui génère $id1, $id2 et $ch1 est vraimment trop mauvais : on ne se ballade pas des chaines de caractères comme ça avant d'envoyer du code de sortie, il fallait utiliser des tableaux à deux dimensions.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

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

Discussions similaires

  1. aide pour un exercice sur les tableaux
    Par mimiif dans le forum Caml
    Réponses: 9
    Dernier message: 30/05/2008, 16h49
  2. Algorithme sur les tableaux à grandes dimensions
    Par bobo034 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 26/05/2008, 17h11
  3. Réponses: 13
    Dernier message: 26/10/2006, 22h02
  4. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 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