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 :

Suppression élément vide tableau associatif


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut Suppression élément vide tableau associatif
    bonjour,
    je voudrais supprimer les elements vides de mon tableau associatif

    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
    Array
    (
        [0] => Array
            (
                [value] => IP
                [id] => 1
                [event_id] => 1
                [attribute_id] => 
                [bool_value] => 
     
            )
     
        [1] => Array
            (
                [value] => Browser
                [id] => 2
                [event_id] => 1
                [attribute_id] => 2
                [bool_value] => 
     
            )
    )
    pour retourner

    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
    Array
    (
        [0] => Array
            (
                [value] => IP
                [id] => 1
                [event_id] => 1
     
     
            )
     
        [1] => Array
            (
                [value] => Browser
                [event_id] => 1
                [attribute_id] => 2
     
     
            )
    )
    j'ai utilisé cette fonction mais sans succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function unset_empty_values(&$array) {
        foreach ($array as $k => $v) {
            if (empty($v))
                unset($array[$k]);
    }
    }
    Si vous avez une idée

  2. #2
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Je rajouterais juste 2 lignes pour passé ta fonction en récursif. Comme cela elle va parcourir les sous tableaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function unset_empty_values(&$array) {
        foreach ($array as $k => $v) {
            if (empty($v))
                unset($array[$k]);
    	elseif (is_array($v))
    	    unset_empty_values($array[$k]));
    	}
    }
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  3. #3
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    j'ai essayé votre proposition mais sans résultat

    et

    vue que mon tableau est à 2 niveaux

    j'ai fait comme ça mais sans succès

    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
    function unset_empty_values(&$array) {
        foreach ($array as  $v) {
            if(is_array($v))
            {
            	foreach($v as $cle => $valeur)
            	{
            		if(empty($valeur))
            		{
            			unset($array[$cle]);
     
            		}
            	}
     
            }
    	}
    }
    je fais comme ça mais rien ne s'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print "<pre>";
    unset_empty_values($monTab);
    print "</pre>";
    est-ce dois-je retourner quelque chose à ma function comme return $array ?

  4. #4
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    J'ai fait un test sur mon PHP en local en utilisant ma fonction, et cela fonctionne comme tu voudrais pourtant.

    Je te montre ce que j'ai fais :

    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
    $tab[0]['truc'] = null;
    $tab[0]['reste'] = 1337;
    $tab[1] = null;
    $tab[2]['truc2'] = null;
    $tab[3]['muche2'] = 31337;
    $tab[4] = 'yahou';
     
    function unset_empty_values(&$array) {
        foreach ($array as $k => $v) {
            if (empty($v))
                   unset($array[$k]);
    	elseif (is_array($v))
    	    unset_empty_values($array[$k]);
       	}
    }
     
    echo '<pre>';
    print_r($tab);
    //var_dump($tab);
    echo '</pre>';
    unset_empty_values($tab);
     
    echo '<pre>';
    //var_dump($tab);
    print_r($tab);
    echo '</pre>';
    Voici ce que ca m'affiche :
    1er print_r (le tableau à nettoyer) :
    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
    Array
    (
        [0] => Array
            (
                [truc] => 
                [reste] => 1337
            )
     
        [1] => 
        [2] => Array
            (
                [truc2] => 
            )
     
        [3] => Array
            (
                [muche2] => 31337
            )
     
        [4] => yahou
    )
    2eme print_r (le tableau nettoyé)

    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
    Array
    (
        [0] => Array
            (
                [reste] => 1337
            )
     
        [2] => Array
            (
            )
     
        [3] => Array
            (
                [muche2] => 31337
            )
     
        [4] => yahou
    )
    Je dirais que tout est ok.


    Concernant la fonction que tu as posté, je vois une erreur.

    Tu as mis :

    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
    function unset_empty_values(&$array) {
        foreach ($array as  $v) {
            if(is_array($v))
            {
            	foreach($v as $cle => $valeur)
            	{
            		if(empty($valeur))
            		{
            			unset($array[$cle]);
     
            		}
            	}
     
            }
    	}
    }
    Seulement le unset n'est pas bon car $array[$cle] n'est pas correct.
    Il faut plutot 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
    function unset_empty_values(&$array) {
        foreach ($array as  $cl => $v) {
            if(is_array($v))
            {
            	foreach($v as $cle => $valeur)
            	{
            		if(empty($valeur))
            		{
            			unset($array[$cl][$cle]);
     
            		}
            	}
     
            }
    	}
    }
    Smiley de Plomb 2009
    Anciennement FrancoisIT

  5. #5
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    bonjour,

    voici un petit script que j'ai utilisé et ça a fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $array = array_map('array_filter', $array);
    pour un tableau de ce type
    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
     
    Array
    (
        [0] => Array
            (
                [value] => IP
                [id] => 1
                [event_id] => 1
                [attribute_id] => 
                [bool_value] => 
     
            )
     
        [1] => Array
            (
                [value] => Browser
                [id] => 2
                [event_id] => 1
                [attribute_id] => 
                [bool_value] => 
     
            )
    )
    Mais pour un tableau de ce type
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    Array
    (
        [0] => Array
            (
                [0] => Array
                    (
                        [value] => dateupload
                        [0] => dateupload
                        [bool_value] =>
                        [1] =>
                        [integer_value] =>
                        [2] =>
                        [double_value] =>
                        [3] =>
                        [timestamp_value] => 2010-01-02 00:00:02
                        [4] => 2010-01-02 00:00:02
                        [text_value] =>
                        [5] =>
                    )
     
                [1] => Array
                    (
                        [value] => encoding
                        [0] => encoding
                        [bool_value] =>
                        [1] =>
                        [integer_value] =>
                        [2] =>
                        [double_value] =>
                        [3] =>
                        [timestamp_value] =>
                        [4] =>
                        [text_value] => flv
                        [5] => flv
                    )
     
                [2] => Array
                    (
                        [value] => filname
                        [0] => filname
                        [bool_value] =>
                        [1] =>
                        [integer_value] =>
                        [2] =>
                        [double_value] =>
                        [3] =>
                        [timestamp_value] =>
                        [4] =>
                        [text_value] => file_0.flv
                        [5] => file_0.flv
                    )
     
                [3] => Array
                    (
                        [value] => lastseen
                        [0] => lastseen
                        [bool_value] =>
                        [1] =>
                        [integer_value] =>
                        [2] =>
                        [double_value] =>
                        [3] =>
                        [timestamp_value] =>
                        [4] =>
                        [text_value] => USA
                        [5] => USA
                    )
             )       
    )
    c'est à dire à 2 dimensions
    j'ai fais commeça mais ça ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $array = array_map(array_map('array_filter', $array));
    si vous avez une idée
    merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/07/2008, 10h32
  2. Réponses: 1
    Dernier message: 23/10/2007, 17h30
  3. [Tableaux] Suppression d'élément de tableau
    Par jpascal dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2006, 15h11
  4. Réponses: 7
    Dernier message: 21/08/2006, 13h58
  5. Supprimé des éléments vide d'un tableau
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 04/07/2005, 19h40

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