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] Création dynamique de tableau type array()


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut [Tableaux] Création dynamique de tableau type array()
    Bonjour,

    dans un de mes scripts, j'ai besoin de creer un array() dynamiquement en fonction d'autres array.

    J'ai donc essayer 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
    17
     
    $secteur = array(
        '25'  => 'Informatique',
        '50'  => 'Glacier'
    );
     
    $surface_dispo = array('10','20','30','40','50','100','200');
     
    echo"array(\n";
    	foreach($secteur as $key => $value){
    		echo "$key => array(\n";
    		for($i=0;$i<sizeof($surface_dispo);$i++){
    			echo "'".($key * $surface_dispo[$i])."' => '".$surface_dispo[$i]."',\n";
    			}
    		echo"),\n";
    	}
    echo');';
    Ce code retourne bien mon array, mais l'affiche dans la page de résultat, ce qui semble normal vue les echo.

    Moi, ce que je voudrai c'est que le résultat soit compris de cette manière par le code. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $prix = array(
            '25' => array(
                  '100' => '100 euros',
                  '200' => '200 euros'
        ),
    );
    Je me demande donc si il existe une fonction du genre constant() pour dire à php que le réusltat de mon script est un array, ou bien si je me suis complètement planté de metode. Et dans ce cas, quelle serait la bonne ?

    Merci d'avance.
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

  2. #2
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    Moi, ce que je voudrai c'est que le résultat soit compris de cette manière par le code. Exemple:

    Code :

    $prix = array( '25' => array( '100' => '100 euros', '200' => '200 euros' ), );
    j'aimerais bien t'aider mais franchement je ne comprend pas trop ce que tu veux faire! ton script ne fais qu'afficher des choses, tu veux faire transformer ce qu'il affiche en un vrai tableau c'est ca ou simplement indenter l'affichage?

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Tiens ce code me dit quelque chose.... (Pahcixam doit se dire "oh non pas lui!")

    Je crois savoir pourquoi tu veux faire ça mais je te previens de suite que c'est pas forcément une bonne solution. En effet tu vas créer un tableau dynamique pour t'en servir quoi... une fois ? Pas très rentable

    Néanmoins pour répondre techniquement à ta question je te suggère de construire un tableau, pas de l'afficher.
    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
    <?php
    $secteur = array(
        '25'  => 'Informatique',
        '50'  => 'Glacier'
    );
     
    $surface_dispo = array('10','20','30','40','50','100','200');
     
    $tablo = array();
    foreach($secteur as $key => $value){
    	$tablo[$key] = array();
    	foreach($surface_dispo as $surface) {
    		$tablo[$key][$key * $surface] = $surface;
    	}
    }
    var_dump($tablo);
    ?>

  4. #4
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Salut,

    déjà merci de vos réponses.

    j'ai bosser sur le truc et j'ai réussi ! (Mr. N se dit ouf la , lol)

    voici mon code:

    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
    <?php
     
    $secteur = array(
        '2'  => 'Informatique',
        '4'  => 'Glacier'
    );
     
    $surface_dispo = array('10','20','30','40','50','100','200');
     
    $prix = array();
    foreach($secteur as $key => $value){
    	$prix[$key] = array();
    	foreach($surface_dispo as $surface) {
    		$prix[$key][$key * $surface] = $surface;
    	}
    }
     
    $personnes = array();
    foreach($secteur as $key => $value){
    	$personnes[$key] = array();
    	foreach($surface_dispo as $surface) {
    		$personnes[$key][$key * $surface] = array();
    			for($i=1;$i<=($surface*0.8);$i++){
    				$personnes[$key][$key * $surface][$i] = $i;
    			}
    	}
    }
     
    ?>
    Quand à ta question sur l'utilité, c'est que dans mon application, tout le monde n'a pas les mêmes domaines de dispo, ni les mêmes surfaces dispo, et j'ai pas envie de generer toutes les combinaisons possible et de les stocker lol.

    Voilà, j'espère que ça peut aider.

    Une dernière question, dans les foreach, si je veut afficher 2 variables dans le array (au niveau de $prix[$key][$key * $surface] = $surface avec un séparation du genre "|" ou "donne", comment je fait ?
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

  5. #5
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par Pahcixam
    Quand à ta question sur l'utilité, c'est que dans mon application, tout le monde n'a pas les mêmes domaines de dispo, ni les mêmes surfaces dispo, et j'ai pas envie de generer toutes les combinaisons possible et de les stocker lol.
    C'est pourtant ce que tu fais. A chaque rechargement de page tu génère toutes les combinaisons possibles. Ok tu les stockes pas, mais tu les génères à chaque fois.
    Or tes deux seuls tableaux de départ suffisent à tes besoins.
    J'ai un secteur ? => Je peux proposer une liste de valeurs possibles pour la surface ( pour chaque s de surface_dispo faire afficher secteur * s)
    J'ai une surface ? => je peux proposer une liste de personnes possibles ( pour i allant de 1 à surface * 0.8 faire afficher i )

    Quand je t'ai proposé une solution l'autre jour qui se basait sur des tableaux imbriqués, c'est que je ne connaissais pas exactement tes besoins. Or on voit ici que $personne n'a aucun lien avec $secteur, et que tes surfaces et personnnes affichées sont le fruit d'un calcul. Ce calcul se basant sur une unique valeur parmis n, il est inutile de faire ce calcul pour les n-1 autres valeurs.

    Donc ton code marche, tant mieux pour toi, mais je te conseille de le simplifier sans quoi tu seras incapable de le relire dans 3 mois (toi ou ton successeur).

  6. #6
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Ok, donc, je fait un if qui me calcule juste le array pour la valeur séléctionnée par le 1 er select. Mais comme ça on retombe sur le problème de mon premier code qui marchait sous FF et pas sous IE.

    Donc la question est, comme faire pour réccuperer la donnée d'un select précédent et d'effectuer le calcule dans la même page ? Et que le tout fonctionne sous FF et IE.

    Parce que dans mon premier code, tout celà était gérer, mais ne fonctionnait malheureusement pas sous IE. J'ai d'ailleur toujours pas compris pourquoi ^^.

    Donc, poour l'instant, je pense faire un if pour gerer mes tableau (charger que le bon) mais réccuperer les valeurs, avec la classe que tu utilises, je sais pas.
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

  7. #7
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Argggh! Oublie les tableaux !!!
    Les deux premiers tableaux, qui définissent les surfaces possibles et les secteurs possibles sont suffisant.

    Que veux tu faire ?
    1. Afficher un select de secteurs
    Bon jusque là c'est facile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    afficher '<select>';
    pour tout s de secteurs faire
       afficher '<option value="' . s.key .'">'. s.value
    finfaire
    2. Afficher un select de surface en fonction d'un secteur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    afficher '<select>';
    pour tout s de surfaces faire
       afficher '<option value="' . s.key .'">'. s.value * secteur_selectionné
    finfaire

    3. Afficher un select de personnes en fonction d'une surface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    afficher '<select>';
    pour i allant de 1 à surface_selectionnée * 0.8 faire
       afficher '<option>'. i
    finfaire

  8. #8
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Arg ... ma tête !!!

    Tout ça je sais le faire, regarde mon premier code.

    Mais j'ai suivit tes conseil afin que celà marche sous IE.

    Mais mon premier code était pensé comme tu viens de me dire plus haut.

    Et maintenant que celui marche, je sais plus trop quoi faire ...
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/03/2007, 19h28
  2. Réponses: 6
    Dernier message: 26/12/2006, 17h01
  3. Réponses: 2
    Dernier message: 10/12/2006, 09h57
  4. [VBA Excel] Un tableau dynamique dans un type utilisateur?
    Par cyber_N dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 23/07/2006, 19h51
  5. Réponses: 1
    Dernier message: 23/06/2006, 11h19

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