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 :

incrémenter les éléments d'un tableau


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 508
    Par défaut incrémenter les éléments d'un tableau
    Bonjour,

    j'ai un tableau de valeurs que je passe en paramètre d'une fonction, et j'alimente un autre tableau avec ces valeurs qui est retourné par la fonction.

    voici ma 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    function getDataRadar($dir, $nb) {
     
    	$data = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); // 32 secteurs
     
    	for ($i = 0; $i < count($dir); $i++) {
        		switch($dir[$i]) {
    			case (($dir[$i]==0)||($dir[$i]==354.375)):	$data[0]=$data[0]+$nb[$i];	break;
    			case (($dir[$i]==343.125)||($dir[$i]==348.75)):	$data[1]=$data[1]+$nb[$i];	break;
    			case (($dir[$i]==331.875)||($dir[$i]==337.5)):	$data[2]=$data[2]+$nb[$i];	break;
    			case (($dir[$i]==320.625)||($dir[$i]==326.25)):	$data[3]=$data[3]+$nb[$i];	break;
    			case (($dir[$i]==309.375)||($dir[$i]==315)):	$data[4]=$data[4]+$nb[$i];	break;
    			case (($dir[$i]==298.125)||($dir[$i]==303.75)):	$data[5]=$data[5]+$nb[$i];	break;
    			case (($dir[$i]==286.875)||($dir[$i]==292.5)):	$data[6]=$data[6]+$nb[$i];	break;
    			case (($dir[$i]==281.25)||($dir[$i]==286.875)):	$data[7]=$data[7]+$nb[$i];	break;
    			case (($dir[$i]==270)||($dir[$i]==275.625)):	$data[8]=$data[8]+$nb[$i];	break;
    			case (($dir[$i]==258.75)||($dir[$i]==264.375)):	$data[9]=$data[9]+$nb[$i];	break;
    			case (($dir[$i]==247.5)||($dir[$i]==253.125)):	$data[10]=$data[10]+$nb[$i];	break;
    			case (($dir[$i]==236.25)||($dir[$i]==241.875)):	$data[11]=$data[11]+$nb[$i];	break;
    			case (($dir[$i]==225)||($dir[$i]==230.625)):	$data[12]=$data[12]+$nb[$i];	break;
    			case (($dir[$i]==213.75)||($dir[$i]==219.375)):	$data[13]=$data[13]+$nb[$i];	break;
    			case (($dir[$i]==202.5)||($dir[$i]==208.125)):	$data[14]=$data[14]+$nb[$i];	break;
    			case (($dir[$i]==191.25)||($dir[$i]==196.875)):	$data[15]=$data[15]+$nb[$i];	break;
    			case (($dir[$i]==180)||($dir[$i]==185.625)):	$data[16]=$data[16]+$nb[$i];	break;
    			case (($dir[$i]==168.75)||($dir[$i]==174.375)):	$data[17]=$data[17]+$nb[$i];	break;
    		}
    	}
     
    	return $data;
    }
    Mais au final, le tableau $data ne contient que des 0.
    pourtant, les tableaux $dir et $nb contiennent des valeurs :
    $dir - $nb
    208.125 - 1
    213.75 - 2
    219.375 - 5
    225 - 35
    230.625 - 89
    236.25 - 82
    241.875 - 71
    247.5 - 26
    253.125 - 24
    258.75 - 3
    264.375 - 1

    Qu'est ce qui cloche ?

    Merci,

    Nico

  2. #2
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Bonjour,

    Je sais pas si c les OU qui posent des problèmes dans tes cases mais sinon, tu peux les faire de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    switch($dir[$i]) {
       case $dir[$i]==0:
       case $dir[$i]==354.375: $data[0]=$data[0]+$nb[$i];	break;
     
       case $dir[$i]==343.125:
       case $dir[$i]==348.75: $data[1]=$data[1]+$nb[$i];	break;
     
    ....

  3. #3
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Sinon , il me semblait que j'avais fait celà une fois

    tu fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    switch (true) {
        case 'une expression logique': 
             // Partie de code exécuté si true
        ....
    }
    Ca marche bien aussi

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Sinon si tu veux faire encore mieux il faudrait trouver une fonction qui associe les valeurs 343.125, 331.875, etc... aux valeurs 1, 2, etc...
    et ca de remplacer tout ton switch par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $index=maFonction($dir[$i]);
    if ($index != null) {
       $data[$index]=$data[$index]+$nb[$i]
    }
    Au passage tu as l'air d'avoir des erreurs pour les valeurs > 270

    Exemple de fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if ($dir[i] mod 11.25 == 0) {
       return 32-($dir[i] mod 11.25);
    }
    if (($dir[i]-5.625) mod 11.25 == 0) {
       return 32-(($dir[i]-5.625) mod 11.25);
    }
    avec des valeurs particulieres pour 0 par exemple ;o)

  5. #5
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    c'est pas plutôt ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     case 0:
     case 354.375: $data[0]=$data[0]+$nb[$i];	break;
     
     case 343.125:
     case 348.75: $data[1]=$data[1]+$nb[$i];	break;

  6. #6
    Membre Expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Par défaut
    Oui, merci, pour la première solution, il n'y a pas de comparaison de ==

    Par contre pour la deuxième, ce serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    switch (true) {
        case (($dir[$i]==0)||($dir[$i]==354.375)): 
             // Partie de code exécuté si true
        ....
    }
    Je crois que j'étais déjà partis dans la deuxième solution pour en oublier la syntaxe du switch, case, désolé pour DiverSIG

  7. #7
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Rien à voir, mais foreach c'est bien quand même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $data = array();
    foreach($dir as $i => $d){
        echo $i . ' : ' . $d . '<br />';
        $data[] = $d;
    }
    var_dump($data);

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/05/2006, 23h23
  2. Lister les éléments d'un tableau
    Par uado dans le forum ASP
    Réponses: 8
    Dernier message: 22/05/2006, 13h02
  3. [Tableaux] Tester les éléments d'un tableau dans un if
    Par Leobaillard dans le forum Langage
    Réponses: 3
    Dernier message: 20/05/2006, 17h07
  4. Réponses: 10
    Dernier message: 27/03/2006, 19h38
  5. Réponses: 4
    Dernier message: 11/01/2006, 10h22

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