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] Effectuer un array_intersect sur n Array


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Par défaut [Tableaux] Effectuer un array_intersect sur n Array
    Bonjour,

    Ayant précédemment effectué une recherche sur ce forum ainsi que dans php.net je ne trouve pas de réponse.

    Lors de la création d'un moteur de recherche qui effectue ces recherches par thème, j'aurais souhaité avoir le nbr de fois que le même thème ressort de l’ensemble des thèmes.

    Pour cela je fais :

    $id_bouble = array_intersect($array_theme_1, $array_theme_2);

    Cela fonctionne très bien, mais comment effectuer cette même recherche sur n tableau, c'est à dire quand on ne connait pas le nombre de tableau.

    Il y a un tableau par thème et ces mêmes tableaux sont générés au début du script. (Environ une 20ene de tableaux).

    Connaîtriez-vous une méthode pour faire un array_intersect sur n tableau.

    Ce que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $array_1 = array(1);
    $array_2 = array(1);
     
    $array = array($array_1[0], $array_2[0]);
     
    $intersect = array_intersect($array);
    print_r($intersect);
    Message de Sortie :

    Warning: Wrong parameter count for array_intersect()
    Alors que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $array_1 = array(1);
    $array_2 = array(1);
     
    $array = array($array_1[0], $array_2[0]);
     
    $intersect = count($array);
    print_r($intersect);
    Fonctionne.

    En construisant la string via un for qui explode tout les tableaux dans une string, cela ne fonctionne pas. (il cherche à analyser la string et non pas des vars).


    Les tableaux sont construits de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    while ($row = mysql_fetch_array($query)) {
     
    				for ($i=0; $i<50; $i++) {
    					$iIncre = $i;
     
    					if ($row['id_theme'] == $iIncre ) {
    						$theme = 'array_theme_'.$iIncre;
    						${$theme}[0]++;
    					}
     
    				}
    }
    Mais comment effectuer un array_intersect sur tout ces tableaux ?


    Merci pour votre aide

  2. #2
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    Je n'ai pas trop compris pourquoi tu passes par des variables dynamiques ($array_theme_N). Pourquoi ne pas utiliser un simple array dont les index numériques sont les id_theme et les valeurs le nombre de fois que id_theme est rencontré ? Ca te ferait un truc du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Array (
      1 => 3,
      12 => 2,
      49=> 5
    );
    En tout cas, pour faire un array_intersect sur un nombre indéterminé d'arrays, tu peux passer par call_user_func_array, comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = call_user_func_array('array_intersect', $arrayOfArrays);

  3. #3
    Membre habitué
    Développeur informatique
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Par défaut
    Merci beaucoup pour ta réponse elle correspond exactement a ce que je cherchais et même plus encore.

    ))

    Pour répondre a te questions, j'étais partie dans le but de construire deux arrays

    Le premier qui contient les noms des array des thèmes et le second pour les valeurs de thèmes tout ça dans le but de pouvoir appeler les thèmes dans un for

    Dans ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    				
    for ($i=0; $i<3; $i++) {
    	$iIncre = $i;
    	if ($iIncre > 0) {
    		if (in_array ($id_bouble[0], ${$listeTheme[$iIncre]} )) {
    			array_push($liste, $iIncre);
    		}
    	}
    }
    Maintenant connaissant ce que tu m'as montré, je pense pouvoir simplifier les choses aux maximums.

    Utilises tu souvent cette méthode (call_user_func_array) ?

    Ou c'est plutôt déconseiller ?

    Y a un article sympa sur http://paul-m-jones.com/blog/?p=182 qui fait des comparaisons de vitesse avec ou sans la méthode call_user_func_array, ce n'est pas toujours la plus rapide.

    En tout cas merci beaucoup

    Si tu as besoin un site à héberger n'hésite pas à me demander.


  4. #4
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    Si on peut se passer de call_user_func_array(), autant le faire. Néanmoins, parfois on n'a pas le choix et c'est une bonne technique pour passer un nombre indéterminé de paramètres à une fonction (un callback en général).

    Si tu as besoin un site à héberger n'hésite pas à me demander.
    Merci beaucoup, mais j'ai ce qu'il faut ; )

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

Discussions similaires

  1. [Tableaux] calcul sur deux array
    Par gemça dans le forum Langage
    Réponses: 5
    Dernier message: 19/12/2007, 07h29
  2. [Tableaux] probléme étrange sur un array
    Par boadog dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2007, 10h43
  3. [Tableaux] récupérer un tableau sur une autre page
    Par samsso2005 dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2006, 22h58
  4. Réponses: 3
    Dernier message: 26/09/2005, 22h24
  5. Réponses: 1
    Dernier message: 28/03/2005, 12h33

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