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 :

Fonction strpos() avec les valeurs de 2 tableaux [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Fonction strpos() avec les valeurs de 2 tableaux
    Bonjour à Tous,

    Mon titre n'est pas top, mais je ne voyais pas comment l'exprimer mieux...

    Soit 2 tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tab1 = array("toto_12", "tata_25", "nono_130", "tutu_95", "dupond_6", "durand_114", "papa_143",.............................);
    $tab2 = array(1,5,6,12,52,130);
    Et je voudrais extraire un 3ème tableau qui comprendrait les valeurs de $tab1 si les valeurs de $tab2 sont trouvées.
    En l'occurrence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    array(
    [0]=>"dupond_6" 
    [1]=>"toto_12" 
    [2]=>"nono_130"
    )
    Sachant que je ne connais pas la taille de $tab1 et que je voudrais que ça "matche" sur le chiffre complet : le tableau résultant ne doit pas contenir, par exemple, "tata_25" ou "tutu_95" même si le 5 est présent.

    Essayé array_filter mais je ne vois pas trop comment faire la fonction...
    Merci de votre aide et belle journée.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Est-ce que les items de $tab1 sont toujours sous cette forme lettres_nombre ou peuvent-ils avoir une forme indéterminée? Et peuvent-ils contenir plusieurs nombres?

    Est-ce que $tab2 est toujours trié?

    Est-ce que l'ordre du tableau résultant est important?

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci de ta réponse : oui, les chiffres suivent toujours un underscore et des lettres.
    Et non, aucune importance sur l'ordre du tableau résultant...

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Dans ce cas tu peux faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tab3 = array_values(
        array_filter($tab1, function ($i) use ($tab2) {
            $nb = substr(strrchr($i, '_'), 1 );
            return in_array($nb, $tab2);
        })
    );
    NB: array_values ne sert qu'à ré-indexer le tableau.

    ou avec ltrim:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tab3 = array_values(
        array_filter($tab1, function ($i) use ($tab2) {
            $nb = ltrim(strrchr($i, '_'), '_');
            return in_array($nb, $tab2);
        })
    );

  5. #5
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci à toi.
    Sur mon test, le tableau retourné est vide.
    Peut-être est-il important de préciser que $tab1 est composé plus précisément d'éléments comme cela :

    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
    (
        [0] => 76FB_orderlinestatus_131.xml
        [1] => 76FB_orderlinestatus_138.xml
        [2] => 76FB_orderlinestatus_146.xml
        [3] => 76FC_orderlinestatus_132.xml
        [4] => 76FC_orderlinestatus_139.xml
        [5] => 76FC_orderlinestatus_147.xml
        [6] => 76RB_orderlinestatus_133.xml
        [7] => 76RB_orderlinestatus_140.xml
        [8] => 76RB_orderlinestatus_148.xml
        [9] => 76RC_orderlinestatus_134.xml
        [10] => 76RC_orderlinestatus_141.xml
        [11] => 76RC_orderlinestatus_149.xml
        [12] => 76RW_orderlinestatus_135.xml
        [13] => 76RW_orderlinestatus_142.xml
        [14] => 76RW_orderlinestatus_150.xml
    )
    En réalité, quelque soit le nb d'éléments il me faut un tableau comportant les 5 plus grands. J'ai crée une fonction qui me retourne un tableau, $tab2 donc, qui contient les 5 chiffres les plus élevés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Array
    (
        [0] => 150
        [1] => 149
        [2] => 148
        [3] => 147
        [4] => 146
    )

  6. #6
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Si, en fait, c'est bon !
    J'ai adapté ta fonction à mes données, c'est impec.
    Je te remercie beaucoup et te souhaite une bonne soirée.

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 912
    Points : 6 705
    Points
    6 705
    Par défaut
    Dans ce cas, ce n'est peut-être pas la meilleur méthode. Il vaut mieux utiliser usort pour trier ton tableau (sauf s'il est déjà trier à la base) puis récupérer les 5 derniers éléments avec array_slice. Pas la peine de créer $tab2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $result = $tab1;
    usort($result, function ($a, $b) {
        $a = substr(strrchr($a, '_'), 1, -4);
        $b = substr(strrchr($b, '_'), 1, -4);
        return $a - $b;
    });
     
    $result = array_slice($result, -5);

  8. #8
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Je suis en train de tester la méthode usort et array_slice. Le truc c'est que usort me retourne un ordre très fantaisiste, sans doute à cause de la structure des données...
    Et aussi parce que je galère pour créer la fonction callback...
    En fait, la question que j'aurais dû poser est : comment trier un tableau tel qu $tab1.

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

Discussions similaires

  1. [AC-2010] Alimenter une variable tableaux avec les valeurs d'un champs
    Par curt dans le forum VBA Access
    Réponses: 5
    Dernier message: 10/11/2011, 20h26
  2. [XL-2003] Fonction Si avec les valeurs des cellules
    Par magyaddello dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/08/2010, 14h48
  3. Réponses: 2
    Dernier message: 15/12/2006, 15h22
  4. Problème avec les valeurs par défaut
    Par Steph Ace dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/12/2005, 10h55
  5. Apelle d une fonction js avec la valeur d'une listbox
    Par echecetmat dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/02/2005, 17h53

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