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 :

Supprimer élément d'un tableau


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Supprimer élément d'un tableau
    Bonjour à tous,

    J'ai un tableau $tab composé de phrases diverses. (récupéré après un $tab=file($path.$file))

    Je souhaiterai supprimer les éléments de ce tableau qui contiennent la chaine 'toto' (par exemple).

    J'arrive bien à supprimer l'élément du tableau qui a pour valeur 'toto' mais pas l'élément qui a pour valeur 'toto test titi'

    Merci pour votre aide.

    CC

  2. #2
    Membre éclairé Avatar de Tillo
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 494
    Points : 683
    Points
    683
    Par défaut
    Bonsoir,

    On pourrait avoir un bout de code ?

    Merci et bonne soirée,
    Alexis
    J'aimerais mieux être le premier dans ce village que le second à Rome. (Caius Julius Caesar)

    J'ai aussi un site sur la Grande Guerre: Histoires de Poilus

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Tu pourrais, avec array_walk, mettre la valeur nulle pour chaque élément du tableau contenant "toto" puis ensuite supprimer les éléments vides du tableau
    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
    $tab = array('titi','toto tata','tutu','toto');
     
    function test_alter(&$item1, $key, $prefix)
    {
        $item1 = strpos($item1,$prefix) !== false ? null : $item1;
    }
     
     
    array_walk($tab, 'test_alter', 'toto');
     
    $tab = array_filter($tab);//supprime les éléments null ou vide ou false
     
    $tab = array_merge($tab);// en option si besoin pour réindexer le tableau
     
    print_r($tab);
    sinon faire une boucle basique en créant un tableau de résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $tab = array('titi','toto tata','tutu','toto');
    $tab_result = array();
    $sup = 'toto';
     
    foreach($tab as $key =>$value)
    if(strpos($value,$sup) === false) $tab_result[$key] = $value;
     
    print_r($tab_result);

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Merci pour vos réponses.
    Je teste tout ca et vous tiens informé.

    Merci encore.

    CC

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Le seul truc de cette solution c'est que si tu as un élément de tableau sous la forme "azetototy", ça va le supprimer également. Si tu ne le souhaites pas on avisera

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    je ne devrai pas entrer dans ce cas la.
    Merci pour cette précision.

    CC

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    En cas de besoin et comme ce n'est pas compliqué je te donne une solution pour cette option :

    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
    $tab = array('titi','toto tata','tutu','toto','azetototy');
     
    function test_alter(&$item, $key, $prefix)
    {
        $tab_mots = explode(' ',$item);
        $item = in_array($prefix,$tab_mots)? null : $item;
    }
     
    $sup = 'toto';
    array_walk($tab, 'test_alter', $sup);
     
    $tab = array_filter($tab);//supprime les éléments null ou vide ou false
     
    $tab = array_merge($tab);// en option si besoin pour réindexer le tableau
     
    echo '<pre>';
    print_r($tab);
    echo '</pre>';
    Dans ce cas il faut que "toto" soit isolé par un (ou deux) espaces pour supprimer l'élément du tableau.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Super Merci, ca fonctionne correctement.

    J'ai utilisé le code suivant que j'ai inséré dans une boucle foreach pour supprimer du tableau initial ($tab) plusieurs valeurs.

    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
     
    function test_alter(&$item, $key, $prefix)
    {
        $tab_mots = explode(' ',$item);
        $item = in_array($prefix,$tab_mots)? null : $item;
    }
     
     
    $sup = array('GUI','SECURE');
     
     
    foreach($sup as $value)	
    {
    		array_walk($tab, 'test_alter', $value);
    		$tab = array_filter($tab);//supprime les éléments null ou vide ou false
    		$tab = array_merge($tab);// en option si besoin pour réindexer le tableau
    }
    En revanche, dans les valeurs a supprimer, je souhaiterai ajouter les lignes vides. (pour rappel, le tableau $tab est le resultat d'un parse de fichier, dans ce fichier certaines lignes sont vides, et je ne souhaiterai pas qu'elles soient prises en compte)

    Pour info, lorsque je fais un VI de ce fichier, je vois dans mon terminal le caractère suivant : ^M

    J'ai testé avec :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sup = array('GUI','SECURE','\n');
    $sup = array('GUI','SECURE','\r');
    Mais ca ne fonctionne pas.

    Merci,


    CC

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Citation Envoyé par cougar5 Voir le message
    J'ai testé avec :
    $sup = array('GUI','SECURE','\n');
    $sup = array('GUI','SECURE','\r');
    Mais ca ne fonctionne pas.

    Merci,


    CC
    Pour info, pour que \n et \r soient recherchés comme des retours lignes il faut les mettre entre doubles quotes : "\n" ou "\r"

    Cela dit ce n'est pas la bonne solution pour ton problème.
    Il suffit juste d'utiliser les options quand tu utilises la fonction file()
    Soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab = file('somefile.txt', FILE_SKIP_EMPTY_LINES);

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    ... de plus pour supprimer plusieurs valeurs tu pourrais faire ceci

    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
    <?php
    $tab = array('titi','toto tata','tutu','toto','azetototy','tata','tatayoyo','tata yoyo');
     
    function test_alter(&$item, $key, $prefix)
    {
        $tab_mots = explode(' ',$item);
        foreach ($prefix as $value) if(in_array($value,$tab_mots)) $item = null;
    }
     
    $sup = array('toto','tata');
    array_walk($tab, 'test_alter', $sup);
     
    $tab = array_filter($tab);//supprime les éléments null ou vide ou false
     
    $tab = array_merge($tab);// en option si besoin pour réindexer le tableau
     
    echo '<pre>';
    print_r($tab);
    echo '</pre>';
    ?>
    ça sera plus optimisé puisque ton tableau ne sera lu qu'une fois quelque soit le nombre de valeurs à supprimer.

    Et pour garder cette même syntaxe et si besoin ne supprimer qu'une valeur il te suffit de faire un tableau à un élément pour la suppression ex: $sup = array('toto');

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Tout fonctionne parfaitement.
    GRAND GRAND merci à vous !!!

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    AIE !!
    J'ai utilisé ton code ci dessus, et je viens de m'apercevoir que si $sup=('titi toto','tutu tata'); c'est a dire avec des espaces, ca ne fonctionne pas

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Et comme ça ?

    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
    <?php
    $tab = array('titi','toto tata','tutu','toto','azetototy','tata','tatayoyo','tata yoyototo','titi tutu tata');
     
    function test_alter(&$item, $key, $prefix)
    {
        $prefix = array_map('trim',$prefix);
     
        foreach ($prefix as $value)
    	{ 
    		$prefix_ = str_replace(' ', '_', $value);
    		$item_ = str_replace($value, $prefix_, $item);
     
    		$tab_mots = explode(' ',$item_);
    		if(in_array($prefix_,$tab_mots)) $item = null;
    	}
     
    }
     
    $sup = array('titi tutu','titi','tata yoyo','toto');
     
    array_walk($tab, 'test_alter', $sup);
    $tab = array_filter($tab);//supprime les éléments null ou vide ou false
    $tab = array_merge($tab);// en option si besoin pour réindexer le tableau
     
    echo '<pre>';
    print_r($tab);
    echo '</pre>';
    ?>

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Ca fonctionne bien après la suppression de la ligne suivante dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $prefix = array_map('trim',$prefix);
    Merci beaucoup pour tous les bouts de code !! et surtout pour ton aide.

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Oui cette ligne était une option pour supprimer les espaces de début et de fin dans les motifs des lignes à supprimer... en supposant qu'ils aient été là par erreur. Mais si tu veux en tenir compte, cette ligne est effectivement à supprimer.

  16. #16
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Je viens de voir qu'on peut statistiquement améliorer un peu les performances d'autant plus que tu auras de nombreux motifs de suppression. Il suffit pour cela de sortir de la boucle une fois le premier motif trouvé, soit :

    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
    $tab = array('titi','toto tata','tutu','toto','azetototy','tata','tatayoyo','tata yoyototo','titi tutu tata');
     
    $sup = array('titi tutu','tata yoyo','toto');
     
     
    function test_alter(&$item, $key, $prefix)
    {	    
        foreach ($prefix as $value)
    	{ 
    		$prefix_ = str_replace(' ', '_', $value);
    		$item_ = str_replace($value, $prefix_, $item);
     
    		$tab_mots = explode(' ',$item_);
     
    		if(in_array($prefix_,$tab_mots)) 
    		{ 
    			$item = null;
    			break;
    		}
    	}
     
    }
     
     
    array_walk($tab, 'test_alter', $sup);
    $tab = array_filter($tab);//supprime les éléments null ou vide ou false
    $tab = array_merge($tab);// en option si besoin pour réindexer le tableau
     
    echo '<pre>';
    print_r($tab);
    echo '</pre>';

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Merci ABCIWEB, je testerai à la rentrée !!

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

Discussions similaires

  1. Supprimer élément d'un tableau
    Par totot dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 01/11/2014, 13h03
  2. Supprimer éléments d'un tableau
    Par liline150 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 02/09/2007, 14h51
  3. [Tableaux] supprimer un élément d'un tableau
    Par banzzai dans le forum Langage
    Réponses: 1
    Dernier message: 15/09/2006, 15h52
  4. Réponses: 2
    Dernier message: 27/05/2006, 19h08
  5. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14

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