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 :

[Tableaux] Modifier array


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut [Tableaux] Modifier array
    Bonjour,
    J'ai un array qui se présente comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    0 :
     
          0 = 10
          1 = 20
          2 = 40
          3 = 30
     
    1 :
     
          0 = 50
          1 = 30
          2 = 10
          3 = 20
    Je souhaite modifier ce tableau pour ajouter la valeur contenue a l'indice n celle de n-1 (sauf pour la première case du tableau bien sur).
    Ainsi mon tableau serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    0 :
     
          0 = 10
          1 = 30 // (10+20)
          2 = 70 // (40+30)
          3 = 100 // (70+30)
     
    1 :
     
          0 = 50
          1 = 80 // (50+30)
          2 = 90 // (80+10)
          3 = 110 // (90+20)
    J'ai codé cette fonction récursive:
    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
     
    function modifier_tableau($tableau) {
    	$i=0;
    	foreach ($tableau as $cle=>$valeur) {
    		if(is_array($valeur)) {
    			modifier_tableau($valeur);
    		} else {
    			if($i!=0){
    				$tableau[$i] = $tableau[$i]+$tableau[$i-1];
    				echo $i.' => '.$tableau[$i].'<br />';
    				$i+=1;
    			} else {
    				echo $i.' => '.$tableau[$i].'<br />';
    				$i+=1;
    			}
    		}
    	}
    }
    Cela m'affiche bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    0 => 10
    1 => 30
    2 => 70
    3 => 100
    0 => 50
    1 => 80
    2 => 90
    3 => 110
    Mais au final le tableau que j'ai passé en paramètre n'a pas été modifié (bien que je l'ai déclaré: global $array; )

    Avez vous une idée de comment je dois m'y prendre SVP?

    Merci d'avance,
    Ganok.
    Plus j'connais les hommes, plus j'aime mon chien...

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Renseigne toi sur la portée des variables avec une recherche sur ton moteur préféré.

    Si tu veux que ton tableau soit modifié, passe le par référence à ta fonction. (Ce n'est pas la seule solution, mais je te laisse un peu chercher, car ton problème, c'est la base de la programmation et je ne ferai pas mieux qu'un bon cours en ligne )

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par George Abidbol Voir le message
    Renseigne toi sur la portée des variables avec une recherche sur ton moteur préféré.

    Si tu veux que ton tableau soit modifié, passe le par référence à ta fonction. (Ce n'est pas la seule solution, mais je te laisse un peu chercher, car ton problème, c'est la base de la programmation et je ne ferai pas mieux qu'un bon cours en ligne )

    J'ai bien sur essayer le passage par référence ( function modifier_tableau(&$tableau) ) ainsi que la déclaration de mon tableau en variable globale mais rien n'y fait.
    Plus j'connais les hommes, plus j'aime mon chien...

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Je pense que c'est la récursivité qui fait planter donc si vous pensez avoir une solution ou si vous voyez comment faire plus simple je suis preneur.

    Merci.
    Plus j'connais les hommes, plus j'aime mon chien...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    Effectivement, passer par référence comme tu le faisais (et comme moi aussi je le faisais jusqu'à maintenant) ça ne passe pas sur les tableaux en PHP5, mais sur les objets, oui.

    CF :
    passage de tableau par reference

    Voilà la solution :

    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
     
    $tableau = new ArrayObject();
    $tableau[0] = new ArrayObject();
    $tableau[0]->append(10);
    $tableau[0]->append(20);
    $tableau[0]->append(40);
    $tableau[0]->append(30);
     
    $tableau[1] = new ArrayObject();
    $tableau[1]->append(50);
    $tableau[1]->append(30);
    $tableau[1]->append(10);
    $tableau[1]->append(20);
     
    print_r($tableau);
    echo '<br>';
    modifier_tableau($tableau);
    print_r($tableau);
     
    function modifier_tableau(&$tableau) {
    	$i=0;
    	foreach ($tableau as $valeur) {
    		if(is_object($valeur)) {
    			modifier_tableau($valeur);
    		} else {
    			if($i!=0){
    				$tableau[$i] = $tableau[$i]+$tableau[$i-1];
    				$i+=1;
    			} else {
    				$i+=1;
    			}
    		}
    	}
    }
    Ca affiche bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArrayObject Object ( [0] => ArrayObject Object ( [0] => 10 [1] => 20 [2] => 40 [3] => 30 ) [1] => ArrayObject Object ( [0] => 50 [1] => 30 [2] => 10 [3] => 20 ) )
    ArrayObject Object ( [0] => ArrayObject Object ( [0] => 10 [1] => 30 [2] => 70 [3] => 100 ) [1] => ArrayObject Object ( [0] => 50 [1] => 80 [2] => 90 [3] => 110 ) )
    J'ai encore appris un truc aujourd'hui, merci

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Sinon il y a beaucoup plus simple que de se prendre la tête avec la portée des variables : renvoyer le tableau comme résultat de la fonction
    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
    function modifier_tableau($tableau) {
    	foreach ($tableau as $cle=>$valeur) {
    		if(is_array($valeur)) {
    			$tableau[$cle] = modifier_tableau($valeur);
    		} else {
    			if($cle!=0){
    				$tableau[$cle] = $tableau[$cle]+$tableau[$cle-1];
    				echo $cle.' => '.$tableau[$cle].'<br />';
    			} else {
    				echo $cle.' => '.$tableau[$cle].'<br />';
    			}
    		}
    	}
       return $tableau ;
    }
    et tu récupères le résultat par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mon_tableau = modifier_tableau($mon_tableau);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Celira Voir le message
    Sinon il y a beaucoup plus simple que de se prendre la tête avec la portée des variables : renvoyer le tableau comme résultat de la fonction
    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
    function modifier_tableau($tableau) {
    	foreach ($tableau as $cle=>$valeur) {
    		if(is_array($valeur)) {
    			$tableau[$cle] = modifier_tableau($valeur);
    		} else {
    			if($cle!=0){
    				$tableau[$cle] = $tableau[$cle]+$tableau[$cle-1];
    				echo $cle.' => '.$tableau[$cle].'<br />';
    			} else {
    				echo $cle.' => '.$tableau[$cle].'<br />';
    			}
    		}
    	}
       return $tableau ;
    }
    et tu récupères le résultat par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mon_tableau = modifier_tableau($mon_tableau);
    Effectivement ça marche, le pire c'est que j'avais essayer cette solution au tout début et ça n'avait pas fonctionné (probablement une erreur de syntaxe quelque part...)
    Merci beaucoup à vous deux, problème résolu.
    Plus j'connais les hommes, plus j'aime mon chien...

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 17/07/2006, 22h08
  2. Réponses: 3
    Dernier message: 12/06/2006, 12h04
  3. Réponses: 9
    Dernier message: 22/05/2006, 09h17
  4. [Tableaux] Affichage Array
    Par dafalri dans le forum Langage
    Réponses: 6
    Dernier message: 06/12/2005, 11h55
  5. création de tableaux avec Array() et élément 'fantome'
    Par Talieth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2005, 09h49

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