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 à plusieurs dimensions [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut Tableaux à plusieurs dimensions
    Bonjour,

    j'ai un problème sur les tableaux à plusieurs dimensions. Voici ce que j'ai actuellement :

    Array
    (
    [Samsung] => Array
    (
    [0] => J2ME
    [2] => Windows Mobile
    )

    [HTC] => Array
    (
    [2] => Windows Mobile
    )

    )
    le code pour obtenir est déjà assez complexe (ne me demandez pas pourquoi, ni de changer de solution) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	for ($i = 0; $i < count($_POST['product']); $i++) {
    		foreach ($_POST['platform'][$i] as $j => $platform) {
    			$arrayPlatforms[$_POST['product'][$i]][$j] = $platform;
                     }
            }
           print_r($arrayPlatforms);
    Mon problème est que pour chaque plate-forme (J2ME, Windows Mobile...) je souhaiterai rajouter une nouvelle dimension.

    En clair, j'aimerai avoir 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
    15
    16
    17
    18
    19
    20
     
    Array
    (
        [Samsung] => Array
            (
                [0] => J2ME 
                          [0] => Bluetooth
                          [1] =>SMS
                          ...
                [2] => Windows Mobile
                          [0]
                          ...
            )
     
        [HTC] => Array
            (
                [2] => Windows Mobile
            )
     
    )
    Est ce que cela est possible et si oui, comment puis-je faire ?

    Merci

  2. #2
    Membre confirmé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Points : 503
    Points
    503
    Par défaut
    Oui tu peux ajouter autant de dimension que tu le souhaites .....


    Exemple :

    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
    <?php
    $shop = array(array(array("rose", 1.25, 15),
                        array("daisy", 0.75, 25),
                        array("orchid", 1.15, 7) 
                       ),
                  array(array("rose", 1.25, 15),
                        array("daisy", 0.75, 25),
                        array("orchid", 1.15, 7) 
                       ),
                  array(array("rose", 1.25, 15),
                        array("daisy", 0.75, 25),
                        array("orchid", 1.15, 7) 
                       )
                 );
    ?>

    Pour la lire :

    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
    <?php
    echo "<ul>";
    for ( $layer = 0; $layer < 3; $layer++ )
    {
        echo "<li>The layer number $layer";
        echo "<ul>";
     
        for ( $row = 0; $row < 3; $row++ )
        {
           echo "<li>The row number $row";
           echo "<ul>";
     
            for ( $col = 0; $col < 3; $col++ )
            {
                echo "<li>".$shop[$layer][$row][$col]."</li>";
            }
            echo "</ul>";
            echo "</li>";
        }
        echo "</ul>";
        echo "</li>";
    }  
    echo "</ul>";
    ?>

    Cf Source

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Le problème vient de cette 3eme dimension. Quand je souhaite la rajouter, les données de la seconde sont écrasées. Je ne sais pas comment ranger mes valeurs (surtout celles de la dernière dimension).

    Voici mon code actuel, j'ai toutes les valeurs qu'il me faut, il ne me manque plus que de les ajouter dans le tableau $arrayPlatforms :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	for ($i = 0; $i < count($_POST['product']); $i++) {
    		foreach ($_POST['platform'][$i] as $j => $platform) {
    			$arrayPlatforms[$_POST['product'][$i]][$j] = $platform;
    			for ($k = 0; $k < count($_POST['select_compat'][$i]); $k++) {
    				if ($k == $j) {
    					echo '<br /> produits : ' . $_POST['product'][$i] . ' platform : ' . $arrayPlatforms[$_POST['product'][$i]][$j] . ' select : ' . $_POST['select_compat'][$i][$k];
    				}
    			}
    		}
    	}
    Résultat de l'echo :
    produits : Samsung platform : J2ME select : NOT TESTED
    produits : Samsung platform : Windows Mobile select : NOT TESTED
    produits : HTC platform : Windows Mobile select : NOT TESTED
    EDIT : Je ne pense pas que ce soit vraiment un tableau "simple" à 3 dimensions. La troisième dimension dépend de la seconde dont elle même dépend de la première.

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Les structures for next sont plutôt embrouillantes pour utiliser les tableaux, n'est-il pas ?

    Avec le construct foreach, c'est tout de suite plus parlant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $products = array('Samsaoule', 'HTC');
    $platforms = array('java', 'windaube');
    $links = array('SMS', 'BlouTouf');
     
    foreach($products as $product) {
        foreach ($platforms as $platform) {
            $tmp = array();
            foreach($links as $link) {
                $tmp[] = $link;
            }
            $arrayPlatforms[$product][$platform] = $tmp;
        }
    }
    print_r($arrayPlatforms);
    Et en POO, ce serait encore plus simple.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    En testant ton cote s.n.a.f.u, j'obtiens ces warnings :

    Warning: Illegal offset type in .../phones_product.php on line 58
    Je pense que tu as raison sur le fait qu'en POO, ça serait plus simple.

  6. #6
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: Illegal offset type in .../phones_product.php on line 58
    Cela se produit souvent lorsqu'on essaie de mettre un tableau à la place d'une clé.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Points : 87
    Points
    87
    Par défaut
    Voici la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    foreach ($_POST['product'] as $i => $product) {
    		foreach ($_POST['platform'][$i] as $j => $platform) {
    			foreach ($_POST['select_compat'][$i] as $k => $compat) {
    				if ($k == $j) {
    					$arrayPlatforms[$product][$platform]['compat'] = $compat;
    				}
    			}
               }
    }
    Merci.

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

Discussions similaires

  1. Tableaux plusieurs dimensions
    Par Tiolebucheron dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/04/2010, 21h03
  2. Tableaux à plusieurs dimensions
    Par hallaj dans le forum Langage
    Réponses: 2
    Dernier message: 28/06/2008, 14h00
  3. Tableaux à plusieurs dimensions
    Par Cheps dans le forum C++
    Réponses: 2
    Dernier message: 10/03/2008, 13h13
  4. Tableaux à plusieurs dimensions
    Par Diabolik dans le forum Assembleur
    Réponses: 3
    Dernier message: 08/12/2003, 12h15

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