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 éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    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 chevronné 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
    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]));
    	}
    }

  3. #3
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    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 chevronné 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
    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]);
     
            		}
            	}
     
            }
    	}
    }

  5. #5
    Membre éclairé Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    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