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 :

Supprimer indiçage tableau


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut Supprimer indiçage tableau
    Bonjour à tous,

    Je travaille sous Delphi For Php, avec un Bdd FireBird.

    J'ai un problème de remplissage d'un TreeView, le composant est par défaut implenté dans le logiciel. Seul problème à l'horizon il faut lui passer un tableau.

    Comme mon treeview est dynamique, je me doit donc de changer la string comprise dans le tableau en fonction des résultats des requêtes.

    Alors que j'arrive à former une chaine de caractère qui serait conforme au modèle décrit par la documentation, je n'arrive pas à contenir la chaîne de caractère propre dans le tableau sans l'indiçage automatique.

    Cela me donne donc :

    Array ( [0] => array('Caption'=>'Mairie 1','Items'=>array(array('Caption'=>'Ecole M1'),array('Caption'=>'Hotel de Ville'))); )
    A la place de :

    array('Caption'=>'Mairie 1','Items'=>array(array('Caption'=>'Ecole M1'),array('Caption'=>'Hotel de Ville')));
    JE fais la convertion de la chaine de caractère au tableau à l'aide de la fonction str_split, ou je metla longueur de la chaine de caractère et celle-ci en paramètres.

    Si quelqu'un aurait une idée pour enlever l'indiçage du tableau, et si possible l'array devant.

    Sinon comment faire pour modifier une string comprise dans un tableau ?

    Merci d'avance de votre aide qui me sera grandement utille.
    Amicalement, descurai

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si $tableau vaut
    Array ( [0] => array('Caption'=>'Mairie 1','Items'=>array(array('Caption'=>'Ecole M1'),array('Caption'=>'Hotel de Ville'))); )
    Et que tu veux
    array('Caption'=>'Mairie 1','Items'=>array(array('Caption'=>'Ecole M1'),array('Caption'=>'Hotel de Ville')));
    Tu veux tout simplement $tableau[0]
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    J' yai pensé mais à vrai dire ça ne marche pas, l'appel à la fonction TreeView se fait de cette manière :

    $this->TreeView1->Items=$items;
    $items étant le tableau.

    Si je met $items [0] ou $a dans mon exemple il ne m'affiche plus du tout le composant.

    Il faut au tableau $items quelquechose de la forme :

    $items[]=array ('Caption'=>'Item1','Items'=>array(array('Caption'=>'SubItem1',array('Caption'=>'SubItem2'))));
    Est ce possible d'avoir la longueur des chaines de caractères, de les tronquer, de rajouter des morceaux, même si la chaine de caractères est dans un tableau ? J'ai essayé mais sans résultats évidents, si vous avez des idées, je suis preneur.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le tableau $items que tu me montres la donnerait exactement le tableau que tu dis ne pas vouloir.

    A mon avis tu te méprends sur quelque chose : un tableau sans indice n'existe pas.
    array('toto', 'titi') signifie array(0=>'toto', 1=>'titi')
    $items[] = "toto"; te donnera array(0=>"toto");
    Je ne comprends pas non plus bien ce que tu veux dire avec tes decoupages de chaines.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    Voila l'exemple de base qui fonctionne :

    $items=array();

    $items[]=array ('Caption'=>'Item1','Items'=>array(array('Caption'=>'SubItem1',array('Caption'=>'SubItem2'))));

    $this->TreeView1->Items=$items;
    J'en ai donc déduit que le treeview faisait référence au tableau.

    Le truc c'est que je n'arrive pas à écrire sauf si je l'écris en dur, le tableau.
    Pourtant quand je fais un écho, de la string que j'intègre dans le tableau, elle est correcte.

    Quand à ce qui est du tronquage des chaînes, en fait je construits ma string au fur et a mesure des requêtes, donc au départ , je fais comme s'il n'y avait que le site.

    Puis s'il y a un bâtiment je dois tronquer la première chaine pour lui enlever le ); de fin et rajouter le reste du tableau correspondant à l'ajout du bâtiment dépendant du site.


    Pour ce qui est de l'affichage, j'ai concocté l'exemple rien qu'avec le site, cela correspond à :

    $items[$a]=array('Caption'=>$site[$i]);
    Et ceci fonctionne avec $this->TreeView1->Items=$items; par la suite.

    mais lorsque je passe le tableau à l'autre fonction et quand je le reprend par la suite, il m'affiche juste array. JE n'arrive pas à travailler sue la chaîne de caractère entière c'est pourquoi je passe par une chaine de caractère proprement dit. De manière a pouvoir la tronquer et l'ajuster facilement.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je suis en train de comprendre que tu construis ton tableau en recomposant une chaine de caractere ...

    Pourrais-tu nous montrer le code ou tu construis ton $item ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    Je viens de me rendre compte que mon système n'était pas bon. Vu l'interprétation faites via l'explorateur.

    Le code généré lors de l'appel des sites est ainsi :

    Array ( [0] => Array ( [Caption] => Mairie 1 ) [1] => Array ( [Caption] => Usine 1 ) [2] => Array ( [Caption] => Hopital 1 ) )
    Et celui généré lors d'un noeud est ainsi :

    Array ( [0] => Array ( [Caption] => Item1 [Items] => Array (

    [0] => Array ( [Caption] => SubItem1 )
    [1] => Array ( [Caption] => SubItem2 ) ) ) )

    Mon problème maintenant est que je n'arrive pas à ajouter un nœud
    en partant du tableau précédant.


    Il faudrait qu'a cette phrase :

    $items[$a]=array('Caption'=>$site[$i]);
    Je rajoute la suite pour le noeud, j'ai essayé un :

    $var1=$var1.'Items' =>array(array('Caption'=>$var2));
    Mais évidemment cela ne fonctionne pas l'interpréteur ne veut même pas me prendre le =>.

    Il faudrait que j'arrive a concaténer la chaine suivante au tableau précédent.

    JE te remercie déjà du dévouement dont tu fais preuve, et je pense que tu va faire comme moi donc je te souhaite un bon appétit. A peluche

  8. #8
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    Je pense que t'as du mal sur le fonctionnement des Array en PHP.

    Pour rajouter un nouveau "SubItem", faut faire en prenant le cas où $mylist est mon tableau et $ind (=0) mon indice que je connais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mylist[$ind]['Items'][] = array('Caption' => 'SubItem3');
    Pour rajouter un nouveau "Caption", on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mylist[] = array('Caption' => 'Item2');
    Pour rajouter un nouveau "Caption" avec des "SubItems" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $mylist[] = array(
      array('Caption' => 'Item3'),
      array(
        array( 'Caption' => 'SubItem1'),
        array( 'Caption' => 'SubItem2'),
      )
    );
    Le résultat attendu va être :
    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
            (
                [0] => Array
                    (
                        [Caption] => Item3
                    )
     
                [1] => Array
                    (
                        [0] => Array
                            (
                                [Caption] => SubItem1
                            )
     
                        [1] => Array
                            (
                                [Caption] => SubItem2
                            )
     
                    )
     
            )
     
    )

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    Je ne te te le fais pas dire, je galère un peu la.

    JE te remercie de toutes ses précisions , je vais tester tout ça, encore merci pour ton dévouement au néophyte que je suis. Bonne après midi
    You're the ^^

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    Je vais encore devoir vous embêtez, j'ai un petit problème.

    La liste des sites s'affiche correctement mais dès que je fais intervenir la fonction qui remplit les bâtiments, la boucle ne fait que le premier tour.

    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
    30
    31
    32
    function TreeView1BeforeShow($sender, $params)
           {
           //Initalisation de la variable i et du tableau
           $i=0;
           $a=0;
           $items = array();
           $itemsa = array();
     
           //Requête SQL
           $this->Query1->close();
           $da = $this->Datasource1->DataSet;
           $this->Query1->SQL = 'SELECT NOM_SITE FROM SITE ';
           $this->Query1->open();
           $da->first();
     
           //BOUCLE SUR LE SITE
              while(!$da->EOF)
                {
                $site=$da->NOM_SITE;
     
                    $items[$a]=array('Caption'=>$site[$i]);
                    //print_r ($items);
     
                    $itemsb[$a]=$this->stringBatiment($items[$a], $site);
                    print_r($itemsb);
     
                    $i++;
                    $da->next();
                    $a++;
               }
           $this->TreeView1->Items=$itemsb;
           }
    Serait ce possible que ce soit la réponse qui fasse crasher la première boucle ?

    Merci d'avance, amicalement descurai.

  11. #11
    Membre chevronné
    Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2004
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 352
    Par défaut
    Utilise la balise CODE (l'image avec un #) :

    Delphi et TreeView, jamais utilisés. Mais le mieux ne serait-il pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($da->next()) {
        // Mes instructions
    }
    ?

    Je doute que ta fonction sait ce qu'est l'objet $this :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->Query1->close();
    Il faudrait que $this soit passé en paramètre à ta fonction ou stocké dans une variable globale car toutes variables déclarés à l'extérieur d'une fonction ne sont pas connues à l'intérieur de celle-ci.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 54
    Par défaut
    J'ai essayé de faire comme tu l'a montré la boucle while, mais sans succès, il n'y a rien qui s'affiche.

    Quand au $this, je pense qu'il est reconnu car il arrive bien à me faire la requête et à m'afficher le premier site, avec les deux premeirs bâtiments qui lui correspondent.

    Je pense que ça doit être un erreur bête de construction de l'algo mais je vois pas. Merci quand même pour ces indications.

Discussions similaires

  1. Supprimer un tableau
    Par dabertch dans le forum JBuilder
    Réponses: 1
    Dernier message: 23/05/2008, 14h17
  2. supprimer un tableau powerpoint / condition "Existe"
    Par ouioui_cmoi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/04/2008, 17h22
  3. supprimer ligne tableau si A est vide
    Par flyhb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/03/2008, 23h30
  4. Supprimer un tableau Powerpoint (PPT) depuis Excel VBA
    Par pontoise dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/03/2008, 19h01
  5. [Tableaux] débutant : supprimer ligne tableau
    Par samplaid dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2006, 10h39

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