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 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    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 !

  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 !

  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.

+ 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, 15h49
  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, 16h11
  3. Réponses: 13
    Dernier message: 26/10/2006, 21h02
  4. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 14h23

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