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

PHP & Base de données Discussion :

petit soucis de tableau [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 146
    Points : 100
    Points
    100
    Par défaut petit soucis de tableau
    Bonjour les experts, desole de vous ennuyer avec un truc qui peut pourtant paraitre simple mais je bloque dessus.

    j'ai un resultat qui se cree dans un tableau a doubles entrees pour des contraintes techniques.
    Un print_r de ce tableau donne ca :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Array
    (
        [0] => Array
            (
                [NAME] => UNDOTBS1
                [0] => UNDOTBS1
                [TOTAL] => 450
                [1] => 450
                [FREE] => 432
                [2] => 432
                [USED] => 18
                [3] => 18
                [FILE_NAME] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
                [4] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
            )
     
        [1] => Array
            (
                [NAME] => SYSAUX
                [0] => SYSAUX
                [TOTAL] => 310
                [1] => 310
                [FREE] => 40
                [2] => 40
                [USED] => 270
                [3] => 270
                [FILE_NAME] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
                [4] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
            )
     
        [2] => Array
            (
                [NAME] => CP_DATA
                [0] => CP_DATA
                [TOTAL] => 200
                [1] => 200
                [FREE] => 199
                [2] => 199
                [USED] => 3
                [3] => 3
                [FILE_NAME] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CP_DATA.DBF
                [4] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CP_DATA.DBF
            )
     
        [3] => Array
            (
                [NAME] => USERS
                [0] => USERS
                [TOTAL] => 26
                [1] => 26
                [FREE] => 25
                [2] => 25
                [USED] => 1
                [3] => 1
                [FILE_NAME] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
                [4] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
            )
     
        [4] => Array
            (
                [NAME] => SYSTEM
                [0] => SYSTEM
                [TOTAL] => 550
                [1] => 550
                [FREE] => 14
                [2] => 14
                [USED] => 536
                [3] => 536
                [FILE_NAME] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
                [4] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
            )
     
        [5] => Array
            (
                [NAME] => EXAMPLE
                [0] => EXAMPLE
                [TOTAL] => 100
                [1] => 100
                [FREE] => 23
                [2] => 23
                [USED] => 77
                [3] => 77
                [FILE_NAME] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
                [4] => D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
            )
     
    )
    je voudrais faire une boucle qui parcours ce tableau en fesant des insert dans une table de ma base oracle sans prendre les numero bien entendu sinon j'aurais des enregistrements en doublons.

    Par exemple un foreach qui fait insert into toto.machin (les champs) name,total,free,used,file_name

    Le probleme c'est que je me embrouille avec ces tableaux bizars.

    Si qqun a une solution a mon probleme je suis preneur car je bloque sur ca et je ne peux pas avancer :'(.

    Edit: j'ai trouve ceci qui me donne un affichage pas adapte bien entendu,
    voici le 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
    function afficher_tableau($tableau)  
        { 
        // on fait une boucle qui lit les éléments du tableau 
        foreach ($tableau as $cle=>$valeur)  
            { 
            // si l'un des éléments est lui même un tableau 
            // alors on applique la fonction à ce tableau 
            if(is_array($valeur))  
                { 
                // on affiche le nom de la clé et 
                // le début d'une liste pour 
                //  décaler le contenu vers la droite 
                echo $cle.' : <ul>';  
     
                // ici se réalise la récursivité 
                // c'est à dire qu'on applique la fonction 
                // à l'élément en cours car c'est lui aussi un tableau 
                afficher_tableau($valeur);    
                } 
     
            // si ce n'est pas un tableau 
            // alors on affiche le contenu de l'élément 
            else 
                { 
                echo $cle.' = '.$valeur.' <br>';   
                } 
            }  
        }  
    afficher_tableau($OraResults);
    et voici le resultat sous oracle ( j ai pas enleve les elements html )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    0NAME = UNDOTBS1 <br>0 = UNDOTBS1 <br>TOTAL = 450 <br>1 = 450 <br>FREE = 432 <br>2 = 432 <br>USED = 18 <br>3 = 18 <br>FILE_NAME = D:\ORACLE\PRODUCT\10.2.0\ORADAT
    A\ORCL\UNDOTBS01.DBF <br>4 = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF <br>1NAME = SYSAUX <br>0 = SYSAUX <br>TOTAL = 310 <br>1 = 310 <br>FREE = 40 <br>
    2 = 40 <br>USED = 270 <br>3 = 270 <br>FILE_NAME = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF <br>4 = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF <
    br>2NAME = CP_DATA <br>0 = CP_DATA <br>TOTAL = 200 <br>1 = 200 <br>FREE = 199 <br>2 = 199 <br>USED = 3 <br>3 = 3 <br>FILE_NAME = D:\ORACLE\PRODUCT\10.2.0\ORADATA
    \ORCL\CP_DATA.DBF <br>4 = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CP_DATA.DBF <br>3NAME = USERS <br>0 = USERS <br>TOTAL = 26 <br>1 = 26 <br>FREE = 25 <br>2 = 25 <b
    r>USED = 1 <br>3 = 1 <br>FILE_NAME = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF <br>4 = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF <br>4NAME = SYST
    EM <br>0 = SYSTEM <br>TOTAL = 550 <br>1 = 550 <br>FREE = 14 <br>2 = 14 <br>USED = 536 <br>3 = 536 <br>FILE_NAME = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.
    DBF <br>4 = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF <br>5NAME = EXAMPLE <br>0 = EXAMPLE <br>TOTAL = 100 <br>1 = 100 <br>FREE = 23 <br>2 = 23 <br>USED
    = 77 <br>3 = 77 <br>FILE_NAME = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF <br>4 = D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF <br>22/03/2010 -
    c'est deja mieux mais comment exploiter ces elements avec un insert into propre qui ne prends pas les doublons ?

  2. #2
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Je ne connais pas Oracle, mais voici qui peut être éclaircira ta lanterne.

    J'imagine que ce qui te pose problème, c'est l'accès aux éléments de chaque tableau dans le tableau ?
    Admettons que ton tableau s'appelle $tab
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach ($tab as $key => $value) {
        foreach ($value as $index => $element){
            echo $index."->".$element."<br>";
        }
     echo "-----------<br>";
    }
    Il y a d'autres méthodes, mais celle-ci te permettra de comprendre foreach.

    Je pense que cela donc fonctionner, je me demande ce que pourra faire avec ce tableau qui mélange indices et associatif?
    Tiens moi au courant.
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 146
    Points : 100
    Points
    100
    Par défaut
    merci bien pour ta reponse, ca marche tres bien mais le probleme c'est que je veux juste recuperer ligne par ligne mon tableau.

    pour pouvoir ensuite lui associer tu me parcours toutes les lignes de chaques tableau de tableau pour faire des inserts.

  4. #4
    Membre expérimenté Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Points : 1 414
    Points
    1 414
    Par défaut
    Au point ou tu en es, je pense que le plus gros du boulot est fait. Je ne vois pas bien ce qui te bloque ?

    A mon avis l'utilisation de la récursivité n'est pas indispensable.

    Comme tu connais la structure, pourquoi ne pas lancer la construction de la requête d'insertion en utilisant les éléments des tableaux associatifs ?
    Es tu retissant à cette technique car la structure de tes résultats risque d'évoluer ?

    Comme je le disais, Oracle pour moi c'est inconnu mais en gros la construction pourrait ressembler à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $SQL  = "INSERT INTO 'latable' SET 'NAME' = '".$valeur['NAME']."', 'TOTAL' = .valeur['TOTAL']." ...
    Est ce bien cela que tu veux faire ?
    ----
    L'avenir appartient à ceux dont les salariés se lèvent tôt.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 146
    Points : 100
    Points
    100
    Par défaut
    Bonjour, oui en effet. En faite mon tuteur vient de m'expliquer le fonctionnement de ce type de tableaux. et si je lui fais ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach ($aOraResults as $nkey ) 
    {
     
    	 echo $nkey["NAME"],$nkey["TOTAL"],$nkey["FREE"],$nkey["USED"],$nkey["FILE_NAME"];
     
    }


    il m'affiche ligne par ligne exactement ce que je veux.

    Je sais ca peut paraitre tout bete mais je suis dba a la base et non developpeur .

    maintenant j'ai plus qu'a remplacer mon echo par un insert avece ce que je veux.

    Je te remercie beaucoup d'avoir pris la peine de me repondre car ca m a permis d'explorer cette piste.

    Bonne journee

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

Discussions similaires

  1. Petit soucis avec un tableau de structures
    Par OVpex dans le forum Débuter
    Réponses: 4
    Dernier message: 22/04/2013, 16h51
  2. (bash) petit souci avec un tableau
    Par lrgtk dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/08/2010, 06h41
  3. petit soucis de position de tableau
    Par Holic dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 30/10/2009, 00h31
  4. petit soucis de taille de tableau
    Par ortholle dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 16/10/2009, 18h08
  5. Réponses: 10
    Dernier message: 26/10/2006, 13h25

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