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

PHP & Base de données Discussion :

remplacement de valeurs dans array multi-dimensionnel


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Points : 13
    Points
    13
    Par défaut remplacement de valeurs dans array multi-dimensionnel
    Bonjour,
    j'aimerais modifier des valeurs dans une variable contenant un tableau associatif multi-dimensionnel.
    Ce genre d'array (j'ai raccourci pour l'exemple, c'est le principe qui m’intéresse) :

    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
    Array
    (
        [0] => Array
            (
                [Note_Ratingmoy] => 99
                [Note_Ratingprog] => 7
                [Note_Review] => 2
     
            )
     
        [1] => Array
            (
                [Note_Ratingmoy] => 1
                [Note_Ratingprog] => 99
                [Note_Review] => 99
     
            )
     
        [2] => Array
            (
                [Note_Ratingmoy] => 1.5
                [Note_Ratingprog] => 5
                [Note_Review] => blou
            )
     
    )
    Prenons par exemple la variable $var, je veux remplacer toutes les valeurs 99 par 'banzai' et retirer 1 de toutes les valeurs comprises entre 1 et 5.
    Je me suis dit tout simplement qu'avec des boucles foreach de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($var AS $var2){
            foreach($var2 AS $var3){
                if($var2 == 99){
                    $var[$var2][$var3] = "NA";
                }
            }
        }
    ça fonctionne sur des arrays simples, donc on doit pouvoir le faire sur des bi-dimensionnels, mais ça ne fonctionne pas. Quelqu'un de plus doué que moi pour m'expliquer où est-ce que je me trompe et pourquoi je suis une grosse buse ?
    Merci !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Points : 13
    Points
    13
    Par défaut Trouvé
    pfff... j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($banzai AS $key=>$val){
            foreach($val AS $key2=>$val2){
                if($val2 == 99){
                    $banzai[$key][$key2] = "NA";
                }
            }
        }

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 905
    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 905
    Points : 6 694
    Points
    6 694
    Par défaut
    Tu peux aussi utiliser array_walk_recursive() qui passe en revue toutes les "feuilles" (i.e. attention pas les branches!) d'un tableau multi-dimensionnel, et ce quelque soit le niveau d'imbrication (1, 2, ... n dimensions).

    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
    $banzai = [
        [ 'Note_Ratingmoy' => 99, 'Note_Ratingprog' => 7, 'Note_Review' => 2 ],
        [ 'Note_Ratingmoy' => 1, 'Note_Ratingprog' => 99, 'Note_Review' => 99 ],
        [ 'Note_Ratingmoy' => 1.5, 'Note_Ratingprog' => 5, 'Note_Review' => 'blou' ]
    ];
     
    array_walk_recursive($banzai, function(&$v) {
        if (is_numeric($v)) {
            if ($v >= 1 && $v <= 5) {
                $v--;
            }
            elseif ($v === 99) {
                $v = 'NA';
            }
        }
    });
    Le deuxième paramètre d'array_walk_recursive est la fonction qui applique la modification (la fonction de rappel/callback function). La variable $v qui est la valeur d'un item du tableau, s'il est passé par référence (en plaçant & devant le nom de variable => &$v) à la fonction de rappel, permet de modifier directement l'item dans le tableau.

    À partir de PHP 8, tu peux utiliser match à la place des if/elseif.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    array_walk_recursive($banzai, function(&$v) { 
        $v = match(true) {
            is_numeric($v) && $v >= 1 && $v <= 5 => $v - 1,
            $v === 99 => 'NA',
            default => $v
        };
    });

  4. #4
    Membre à l'essai
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Tu peux aussi utiliser array_walk_recursive() qui passe en revue toutes les "feuilles" (i.e. attention pas les branches!) d'un tableau multi-dimensionnel, et ce quelque soit le niveau d'imbrication (1, 2, ... n dimensions).
    Proooopre ! merci, carrément parfait !

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

Discussions similaires

  1. Remplace une valeur dans une colonne
    Par roger34 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/06/2007, 22h44
  2. Tester existence valeur dans ARRAY
    Par Matmal11 dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2007, 11h04
  3. Réponses: 5
    Dernier message: 12/01/2007, 21h40
  4. [MS SQL] Remplacer des valeurs dans plusieurs tables
    Par salmoliv dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/10/2006, 17h31
  5. [Tableaux] Remplacement de valeurs dans un texte
    Par JavaSearch dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2006, 23h33

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