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 :

Tableau complexe à extraire


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Tableau complexe à extraire
    Bonjour,

    J'ai un tableau un peu complexe (pour moi) dont je souhaiterais extraire les données pour en faire des listes de couples {spécificité,valeur} :

    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
    Array
    (
        [1] => Array
            (
                [1] => (1,1)
                [2] => (1,2)
            )
     
        [2] => Array
            (
                [3] => (2,3)
            )
     
        [3] => Array
            (
                [4] => (3,4)
                [5] => (3,5)
            )
    )
    La structure de ce tableau est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Array
    (
        [Spécificité] => Array
            (
                [Valeur] => (Spécificité,Valeur)
            )
    )
    A partir du tableau ci-dessus, je souhaiterais obtenir des listes de couples (qui sont enfaite de simples chaînes des caractères) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (1,1),(2,3),(3,4)
    (1,2),(2,3),(3,4)
    (1,1),(2,3),(3,5)
    (1,2),(2,3),(3,5)
    Je pense que l'exemple est assez parlant.

    Je me suis lancé dans toute une succession de boucles foreach(), seulement je n'y arrive pas et difficulté supplémentaire : le nombre de couples par liste est infini (dans l'exemple, je n'en ai pris que 3).

    Merci d'avance pour votre aide, là je sèche...

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Salut,

    Un script à base de Foreach devrait résoudre ton probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ($ArrayPrincipal as $specificite) {
         foreach ($specificite as $valeur) {
              Echo $valeur.",";
         }
    }
    Le premier foreach parcourt le contenu de ton array principal
    Le second parcourt la liste de tes spécificités, et pour chacune renvoie la valeur associée (pas la clé, mais bel et bien son contenu, soit ce que tu veux afficher de ce que j'ai compris).

    Olif.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    affro-jojo ne veut pas afficher son tableau mais extraire une combinaison de toutes les listes possibles ce qui devient légerement plus complexe. J'essaie de m'y atteler dans la journée

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pour un thread relativement similaire, j'avais pondu un algo pour calculer le produit cartésien de plusieurs tableaux. Je pense que ça peut t'aider:
    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
    function array_cartesian_product () {
      if (!$c = func_num_args()) return array();
      if ($c == 1) {
        $r = array();
    	foreach (func_get_arg(0) as $v) {
    		$r[] = array($v);
    	}
    	return $r;
      }
     
      $args = func_get_args();
      $f = array_shift($args);
      $s = call_user_func_array('array_cartesian_product', $args);
      $r = array();
     
      foreach ($f as $v) {
        foreach ($s as $w) {
    	  array_unshift($w, $v);
    	  $r[] = $w;
    	}
      }
     
      return $r;
    }
    Dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var_dump(array_cartesian_product(
      array("(1,1)", "(1,2)"),
      array("(2,1)"),
      array("(3,4)", "(3,5)")
    ));
    Produit:
    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
    array
      0 => 
        array
          0 => string '(1,1)' (length=5)
          1 => string '(2,1)' (length=5)
          2 => string '(3,4)' (length=5)
      1 => 
        array
          0 => string '(1,1)' (length=5)
          1 => string '(2,1)' (length=5)
          2 => string '(3,5)' (length=5)
      2 => 
        array
          0 => string '(1,2)' (length=5)
          1 => string '(2,1)' (length=5)
          2 => string '(3,4)' (length=5)
      3 => 
        array
          0 => string '(1,2)' (length=5)
          1 => string '(2,1)' (length=5)
          2 => string '(3,5)' (length=5)

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Voila la 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
    $out = array();
    $datas = array(array('(1,1)','(1,2)'),array('(2,3)'),array('(3,4)','(3,5)'));
     
    foreach ($datas as $pos => $data) {
      // premier
      if (empty($out)) {
        $out = $data;
      } else {
        // Tableau temporaire
        $new = array();
        // Ajouter chaque couple a chaque liste deja existante au nouveau tableau
        foreach ($data as $couple) {
          for ($i=0;$i<count($out);$i++) {
    	$new[] = $out[$i].','.$couple;
        };};
        // Mettre à jour le tableau 
        $out = $new;
    };};
    La sortie est alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     $out :
    Array ( [0] => (1,1),(2,3),(3,4) [1] => (1,2),(2,3),(3,4) [2] => (1,1),(2,3),(3,5) [3] => (1,2),(2,3),(3,5) )

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Merde, pour une fois que j'avais une réponse à une question posée

    Après relecture, ma version semblait en effet trop simple, toutes mes confuses

    Edit : Par contre, Avalion, les ";" apres les "}", c'est volontaire, erreur de ta part, utilité quelconque ? C'est une syntaxe que je n'avais jamais vu.

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Mettre des ; à la suite des blocs ne gène pas mais ça ne fais absolument rien non plus...

    Sûrement un résidu des éditions successives du script

    @Avalion Je n'ai pas fais de bench mais je pense que mon algo est un poil plus rapide du fait de la récursivité. Mais sur un jeu d'entrée aussi léger, la différence n'est pas perceptible.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci à vous deux, j'ai utilisé la solution de Avalion car je n'arrive à utiliser la fonction de Benjamin :-(

    A partir de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tableau = array($tableau1, $tableau2, $tableau3, ..., $tableauX);
    Je ne sais pas faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_cartesian_product($tableau1, $tableau2, $tableau3, ..., $tableauX)

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call_user_func_array('array_cartesian_product', $tableau);

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    @Benjamin :
    oui c'est surement plus rapide a cause de ma triple boucle mais ne pas utiliser de fonction c'est sympa aussi

    pour ce qui est des }; c'est une facon de coder qui me permet un débuggage assez simple grace à un framework perso

  11. #11
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par Avalion Voir le message
    @Benjamin :
    oui c'est surement plus rapide a cause de ma triple boucle mais ne pas utiliser de fonction c'est sympa aussi

    pour ce qui est des }; c'est une facon de coder qui me permet un débuggage assez simple grace à un framework perso
    Wabon ? J'ai toujours pensé qu'une jolie fonction c'était bien mieux qu'un bloc de code... Bah après c'est les goûts et les couleurs.

    Ton framework perso on peut y jeter un oeil ?

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Points : 96
    Points
    96
    Par défaut
    Désolé mais mon framework appartient à la boite dans laquelle je suis stagiaire et dans les termes du contrat, je ne peux divulguer le framework :s
    Pour info, la boite propose des elections professionnelles donc demande un minimum de sécurité

  13. #13
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    D'accord

    Si tu veux jeter un oeil au mien, je l'ai publié par là: http://code.google.com/p/php-axiom/

Discussions similaires

  1. [phpToPDF] Tableau complexe
    Par yosraisi dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/05/2008, 16h30
  2. [FPDF] Générer PDF avec tableau complexe
    Par MANU_2 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/04/2008, 15h01
  3. Jasper : Tableau complexe
    Par steph48 dans le forum Jasper
    Réponses: 2
    Dernier message: 29/02/2008, 10h59
  4. Réponses: 4
    Dernier message: 25/07/2007, 10h29
  5. [Tableaux] Gérer un tableau complexe en php
    Par PedroBD dans le forum Langage
    Réponses: 4
    Dernier message: 28/07/2006, 11h55

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