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 :

Utiliser la fonction in_array


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par défaut Utiliser la fonction in_array
    Bonjour,

    Je n'obtiens pas le bon résultat de test avec in_array :
    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
    <?php
    /*
    Contenu de indesirables.txt
       zzz@onlinesuccessmodel.com
      aaa@smtp.fashionesta.com
      BBB@azecris.fr
      ccc@onlinesuccessmodel.com
      DDD@gmail.com
    */
     
    $fichier_lire = fopen('indesirables.txt', 'r');
    while (!feof($fichier_lire)) {
    	$tab_lignes[] = fgets($fichier_lire); 
    }
    fclose($fichier_lire);
     
    echo 'APRES TRAITEMENT'.'<br>';
    foreach ($tab_lignes as $ligne)
    { 
      list($prefixe, $suffixe)= explode('@', $ligne); 
      $tab_desirable = array('azecris.fr', 'gmail.com');
      if (!in_array($suffixe, $tab_desirable))
      {
        echo "@".trim($suffixe); 
        echo "<BR>"; 
      } else if (in_array($suffixe, $tab_desirable))
      {
        echo $ligne;
        echo "<BR>"; 
      }
    }
    APRES TRAITEMENT - erreur :
    @onlinesuccessmodel.com
    @smtp.fashionesta.com
    @azecris.fr
    @onlinesuccessmodel.com
    @gmail.com
    APRES TRAITEMENT - je voudrais obtenir :
    @onlinesuccessmodel.com
    @smtp.fashionesta.com
    BBB@azecris.fr
    @onlinesuccessmodel.com
    DDD@gmail.com
    J'ai besoin de votre aide SVP.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 657
    Par défaut
    j'obtiens bien le bon tri du tableau avec votre code.
    affichez le contenu de $tab_lignes pour vérifier qu'il est comme vous l'imaginez.

  3. #3
    Candidat au Club
    Femme Profil pro
    hobby
    Inscrit en
    Avril 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : hobby

    Informations forums :
    Inscription : Avril 2024
    Messages : 4
    Par défaut
    Bonjour,
    La fonction in_array ne fonctionne pas bien à cause du caractère de retour à la ligne du fichier txt.
    Il convient donc de les supprimer avant le traitement:

    Code PHP : 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
     <?php
    /*
    Contenu de indesirables.txt
       zzz@onlinesuccessmodel.com
      aaa@smtp.fashionesta.com
      BBB@azecris.fr
      ccc@onlinesuccessmodel.com
      DDD@gmail.com
    */
     
    $fichier_lire = fopen('fichier.txt', 'rb');
    while (!feof($fichier_lire)) {
    	$tab_lignes[] = fgets($fichier_lire); 
    }
    fclose($fichier_lire);
    echo 'APRES TRAITEMENT'.'<br>';
     
     
    foreach ($tab_lignes as $ligne)
    { 
    	$ligne= str_replace(array("\r\n", "\n", "\r"), "", $ligne);   // on retire les caractères de retour à la ligne
      if(strlen($ligne)>0){        // on vérifie si la ligne du fichier n'est pas vide
     
    	  list($prefixe, $suffixe)= explode('@', $ligne); 
    	  $tab_desirable = array("azecris.fr","gmail.com");
    	  if (! in_array($suffixe, $tab_desirable))
    	  {
    		echo "@".trim($suffixe); 
    		 echo "<BR>"; 
    	  } else if (in_array($suffixe, $tab_desirable))
    	  {
    		echo $ligne;
    		echo "<BR>"; 
    	  }
    	  }
    }

    A bientôt

  4. #4
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par défaut
    Merci de vous intéresser à mon sujet.

    Mais le nouveau code proposé par HelloWorldFr ne change rien au résultat par rapport au mien.

    revoir
    APRES TRAITEMENT - je voudrais obtenir :
    ...

  5. #5
    Candidat au Club
    Femme Profil pro
    hobby
    Inscrit en
    Avril 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : hobby

    Informations forums :
    Inscription : Avril 2024
    Messages : 4
    Par défaut
    Bonjour,
    De mon coté j'ai bien le résultat escompté:
    APRES TRAITEMENT
    @onlinesuccessmodel.com
    @smtp.fashionesta.com
    BBB@azecris.fr
    @onlinesuccessmodel.com
    DDD@gmail.com
    je ne sais pas si tu à remarquer, mais j'utilisai de mon coté le fichier "fichier.txt" au lieu de "indesirables.txt" pour les tests.

    Code PHP : 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
     <?php
    /*
    Contenu de indesirables.txt
       zzz@onlinesuccessmodel.com
      aaa@smtp.fashionesta.com
      BBB@azecris.fr
      ccc@onlinesuccessmodel.com
      DDD@gmail.com
    */
     
    $fichier_lire = fopen('indesirables.txt', 'r');
    while (!feof($fichier_lire)) {
    	$tab_lignes[] = fgets($fichier_lire); 
    }
    fclose($fichier_lire);
    echo 'APRES TRAITEMENT'.'<br>';
     
     
    foreach ($tab_lignes as $ligne)
    { 
    	$ligne= str_replace(array("\r\n", "\n", "\r"), "", $ligne);
      if(strlen($ligne)>0){
     
    	  list($prefixe, $suffixe)= explode('@', $ligne); 
    	  $tab_desirable = array("azecris.fr","gmail.com");
    	  if (! in_array($suffixe, $tab_desirable))
    	  {
    		echo "@".trim($suffixe); 
    		 echo "<BR>"; 
    	  } else if (in_array($suffixe, $tab_desirable))
    	  {
    		echo $ligne;
    		echo "<BR>"; 
    	  }
    	  }
    }

    Tu est sur quel système d'exploitation?
    Pourrai-tu nous donner plus de détail si cela ne convient pas?

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Si je comprends bien tu veux dans l'ordre :
    -- 1. Le domaine seul d'un e-mail indésirable
    -- 2. Le mail complet d'un domaine accepté

    Ton script chez moi :

    APRES TRAITEMENT<br>@onlinesuccessmodel.com<BR>@smtp.fashionesta.com<BR>@azecris.fr<BR>@onlinesuccessmodel.com<BR>@gmail.com<BR>PHP Warning: Undefined array key 1 in /home/tests/f443.php on line 21
    Warning: Undefined array key 1 in /home/tests/f443.php on line 21
    PHP Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/tests/f443.php on line 25
    Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/tests/f443.php on line 25
    @<BR>
    Avec le fichier indesirables.txt suivant :

    Contenu de indesirables.txt
    zzz@onlinesuccessmodel.com
    aaa@smtp.fashionesta.com
    BBB@azecris.fr
    ccc@onlinesuccessmodel.com
    DDD@gmail.com
    Je propose :

    Code PHP : 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
    $emails = [
        'zzz@onlinesuccessmodel.com',
        'aaa@onlinesuccessmodel.com',
        'fff@gmail.com',
        'DDD@gmail.com',
    ];
     
    $rejected = file('indesirables.txt', FILE_IGNORE_NEW_LINES);
     
    $allowed = ['azecris.fr', 'gmail.com'];
     
    foreach ($emails as $email) {
        [$user, $domain] = explode('@', $email); // On espère 1 et 1 seul "@"
        if (in_array($email, $rejected)) { // E-mail indésirable ?
            echo "@{$domain}<br>\r\n";
        } elseif (in_array($domain, $allowed)) { // Dommaine accepté ?
            echo "{$email}<br>\r\n";
        } else { // Autre situation ?
            echo "{$email} = Ni domaine accepté et ni mail rejeté<br>\r\n";
        }
    }

    Produit :

    @onlinesuccessmodel.com<br>
    aaa@onlinesuccessmodel.com = Ni domaine accepté et ni mail rejeté<br>
    fff@gmail.com<br>
    @gmail.com<br>
    Si ça ne te convient pas donne un exemple avec $emails valorisée et le résultat attendu.

  7. #7
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par défaut
    re,
    Vos propositions ne donne pas le résultat que j'attends du code.
    indesirable.txt contient une liste d'adresses mail suivante (extrait) :
    etigs9p@smtp.fashionesta.com
    jacques@azecris.fr
    q9b0zj@onlinesuccessmodel.com
    bill@gmail.com
    29522649399516169.269f91lk5aw1ymq@smtp.fashionesta.com
    adambyrnew@outlook.com
    bncmail2c93@ogesolitaire.fr
    bounce17aa@reronmystique.fr
    bounce1867@reronmystique.fr
    carrefour@email.carrefour.fr
    contact@belleaunaturel.fr
    contact@bienlebonjourdandre.com
    contact@caisse-epargne.fr
    Et le but est d'obtenir une liste de domaines suivante, et les adresses mail entières pour les exceptions contenues dans le tableau suivant :

    $tab_desirable = array("azecris.fr","gmail.com");


    Donc le résultat attendu suivant :

    @smtp.fashionesta.com
    jacques@azecris.fr
    @onlinesuccessmodel.com
    bill@gmail.com
    @smtp.fashionesta.com
    @outlook.com
    @ogesolitaire.fr
    @reronmystique.fr
    @reronmystique.fr
    @email.carrefour.fr
    @belleaunaturel.fr
    @bienlebonjourdandre.com
    @caisse-epargne.fr
    Ceci a pour finalité d'être utilisé dans Outlook pour modifier ma liste d'indésirable.

  8. #8
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Ok, c'est plus simple que je ne pensais :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    $blacklist = file(__DIR__ . '/indesirables.txt', FILE_IGNORE_NEW_LINES);
     
    $allowed = ['azecris.fr', 'gmail.com'];
     
    foreach ($blacklist as $email) {
        [$user, $domain] = explode('@', $email);
        if (in_array($domain, $allowed)) {
            echo "{$email}\r\n";
        } else {
            echo "@{$domain}\r\n";
        }
    }

    Avec indesirables.txt :

    etigs9p@smtp.fashionesta.com
    jacques@azecris.fr
    q9b0zj@onlinesuccessmodel.com
    bill@gmail.com
    29522649399516169.269f91lk5aw1ymq@smtp.fashionesta.com
    adambyrnew@outlook.com
    bncmail2c93@ogesolitaire.fr
    bounce17aa@reronmystique.fr
    bounce1867@reronmystique.fr
    carrefour@email.carrefour.fr
    contact@belleaunaturel.fr
    contact@bienlebonjourdandre.com
    contact@caisse-epargne.fr
    Cela donne :

    @smtp.fashionesta.com
    jacques@azecris.fr
    @onlinesuccessmodel.com
    bill@gmail.com
    @smtp.fashionesta.com
    @outlook.com
    @ogesolitaire.fr
    @reronmystique.fr
    @reronmystique.fr
    @email.carrefour.fr
    @belleaunaturel.fr
    @bienlebonjourdandre.com
    @caisse-epargne.fr

  9. #9
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par défaut
    J'ai appliqué ton code Sèb. et j'obtiens ceci :


    @smtp.fashionesta.com
    @azecris.fr
    @onlinesuccessmodel.com
    @gmail.com
    @smtp.fashionesta.com
    @smtp.fashionesta.com
    @smtp.fashionesta.com
    @smtp.fashionesta.com
    @smtp.fashionesta.com
    @onlinesuccessmodel.com
    @smtp.fashionesta.com
    @actu.comarketing-news.fr
    @actu.comarketing-news.fr
    @actu.comarketing-news.fr
    @outlook.com
    @ogesolitaire.fr
    ...
    donc pas résolu.

    Je précise :
    - je test en local avec Wampserver
    - sous Windows 10

  10. #10
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Chez moi ça fonctionne, alors sans infos supplémentaires de ta part je ne pourrai rien de plus.

  11. #11
    Candidat au Club
    Femme Profil pro
    hobby
    Inscrit en
    Avril 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : hobby

    Informations forums :
    Inscription : Avril 2024
    Messages : 4
    Par défaut
    De mon côté cela fonctionne aussi:

    APRES TRAITEMENT
    @smtp.fashionesta.com
    jacques@azecris.fr
    @onlinesuccessmodel.com
    bill@gmail.com
    @smtp.fashionesta.com
    @outlook.com
    @ogesolitaire.fr
    @reronmystique.fr
    @reronmystique.fr
    @email.carrefour.fr
    @belleaunaturel.fr
    @bienlebonjourdandre.com
    @caisse-epargne.fr

  12. #12
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par défaut
    J'ai modifié en utilisant file()

    file('indesirables.txt', FILE_IGNORE_NEW_LINES);
    Mais rien n'y fait. PHP ne prends pas en compte les exceptions de in_array()

  13. #13
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    La moindre des choses est de donner un script exécutable qu'on pourrait tester et corriger

  14. #14
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2006
    Messages : 41
    Par défaut
    re bonjour,

    J'ai filtré les emails source avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $email = filter_var($email, FILTER_SANITIZE_EMAIL);
    et cela fonctionne maintenant

    Code complet :
    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
     
    $tab_emails = file('indesirables.txt', FILE_IGNORE_NEW_LINES);
    echo 'APRES TRAITEMENT'.'<br>';
    foreach ($tab_emails as $email)
    { 
      $email = filter_var($email, FILTER_SANITIZE_EMAIL);
      list($prefixe,$domaine)= explode("@",$email);
    	$tab_except = array('azecris.fr', 'gmail.com');
      if (in_array($domaine, $tab_except)) { // domaine est la valeur cherchée
        echo $email; //affiche l'email complet
        echo '<BR>';
      } else {
        echo "@".$domaine; //affiche seulement le domaine précédé de @
        echo '<BR>';
      }
    }
    Merci quand même de vos contributions.

  15. #15
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    OK, donc il y a quelque chose qui gêne dans ton fichier, qui n'est pas tel que tu le crois et ni comme tu l'as transmis, et que tu supprimes avec filter_var()
    Le problème réel n'est pas réglé

    J'aime bien le "merci quand même"

  16. #16
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Plusieurs pistes d'optimisation du script :

    - sortir ton tableau $tab_except de la boucle : inutile de le réaffecter à chaque passage.
    - faire un array_flip() de ton tableau $tab_except et remplacer in_array() par isset() qui est bien plus performant. En fonction du nombre de passages dans la boucle, le gain ne sera pas négligeable.

Discussions similaires

  1. [MySQL] Soucis avec la fonction in_array
    Par fwebconcept dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 19/10/2013, 18h57
  2. Soucis avec Fonction in_array
    Par poleta77 dans le forum Langage
    Réponses: 3
    Dernier message: 27/01/2010, 11h39
  3. [Tableaux] Pb avec fonction in_array
    Par yveslens dans le forum Langage
    Réponses: 4
    Dernier message: 27/03/2007, 13h34
  4. Réponses: 13
    Dernier message: 20/03/2003, 08h11
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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