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] Optimisation d'intersection de tableau


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut [Tableaux] Optimisation d'intersection de tableau
    Bonjour,

    Je veux faire l'intersection d'un nombre dynamique de tableaux contenants des valeurs entières.

    Pour mon exemple, considérons que $tab est un tableau de tableau entier...
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tab[0] = array(1, 5, 6, 8, 9);
    $tab[0] = array(1, 2, 3);
    $tab[0] = array(1, 6, 7, 8, 9, 10);
    // etc...
    Pour faire l'intersection, j'écrit (je vous épargne les is_array) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $intersection = $tab[0];
    foreach($tabas $val)
    {
    	$intersection = array_intersect($intersection, $val);
    }
    Ce qui marche, mais ne me satisfait pas puisque je trouve la méthode assez peu optimisé compte tenu du fait que je fait l'intersection dans le vide pour le 1er tableau, et que ça serait probablement beaucoup plus rapide si je laissais faire la fonction array_intersect en 1 seule fois avec plusieurs tableaux en parametres...

    Donc comment faire avec la syntaxe de array_intersect (a1, a2, [a3, ...]) pour faire directement l'intersection d'un nombre dynamique de tableau ???

  2. #2
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut tu es sûr de ton code?
    Les 3 premières lignes de ton code me semblent bizarre...

    Tu as mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab[0] = array(1, 5, 6, 8, 9);
    $tab[0] = array(1, 2, 3);
    $tab[0] = array(1, 6, 7, 8, 9, 10);

    Quand j'ai fait un print_r après chaque ligne, je me suis rendu compte d'un truc bizarre. J'ai testé comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab[0] = array(1, 5, 6, 8, 9);
    $tab[1] = array(1, 2, 3);
    $tab[2] = array(1, 6, 7, 8, 9, 10);
    Et le résultat me semble plus logique.

  3. #3
    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,

    Même remarque que david drapeau quant aux indices des tableaux.

    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
      $tab[0] = array(1, 5, 6, 8, 9);
      $tab[1] = array(1, 2, 3);
      $tab[2] = array(1, 6, 7, 8, 9, 10);
     
      foreach($tab as $cle => $valeur)
      {
        $param[] = '$tab[' . $cle . ']';
      }
     
      eval('$result = array_intersect (' . implode(', ', $param) . ');');
      print_r($result);
    ?>

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Mouarf, oué, j'ai fait mis ces tableaux à la main vite fait pour l'exemple... ils existent pas dans mon code, et c'est une faute de frappe (enfin copier/coller de la 1er ligne) ...
    a remplacer par 0 1 2 donc...

    Je voulais juste vous épargner la montagne de ligne (d'ailleur opérationnelle) qui peut générer des centaines de tableaux contenant eux même des centaines de valeurs, et qui n'ont aucun interet pour la question...

    Bref, a part les indices, ça change rien a ma question

    Edit : sinon, concernant le eval, y'a une citation que j'aurais voulu mettre ici, mais je ma retrouve pas... grosso modo, ça dit que si tu utilises eval, c'est que ton code est mal pensé ! D'autre part, utiliser eval est rarement une optimisation

  5. #5
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut pousser le vice
    Si vraiment tu veux pousser le vice de l'optimisation jusqu'au bout, tu n'as qu'à programmer la fonction d'intersection en C via PECL puis la compiler et l'intégrer au moteur PHP

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    A vrai dire, en posant cette question, j'avais espoir que l'on m'aprenne une méthode secrete pour passer un nombre dynamique d'élements à une fonction recevant un nombre dynamiques de paramètres...

  7. #7
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut pour le code dynamique
    Si tu veux créer du code dynamique, tu as l'extension runkit et tu peux commencer par la plus basique qui est classkit.

    En fait runkit est plus récente que classkit. Elle fait tout ce que classkit fait avec des fonctionnalités supplémentaires.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/06/2007, 15h48
  2. [Tableaux] Optimiser la représentation d'un tableau
    Par lun4t1k dans le forum Langage
    Réponses: 1
    Dernier message: 04/02/2007, 18h20
  3. Réponses: 1
    Dernier message: 24/12/2005, 14h18
  4. [Tableaux] function qui retourne un tableau
    Par toure32 dans le forum Langage
    Réponses: 1
    Dernier message: 21/12/2005, 21h16
  5. Réponses: 14
    Dernier message: 13/10/2005, 12h55

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