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 :

Scinder 2 tableaux


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Par défaut Scinder 2 tableaux
    Bonjour,

    A la sortie d'un foreach, j'obtiens un array ($secondFrom) qui contient ceci (quand je fais un print_r) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Array ( [0] => section [1] => menu [2] => endroit [3] => statut ) Array ( [0] => statut )
    Mon objectif : j'aimerai scinder ce tableau en 2 tableaux pour me permettre ensuite de faire un array_diff() et ainsi détecter que 'statut' apparait dans les 2 tableaux. Ensuite, je pourrai faire un array_merge() pour avoir de nouveau un seul tableau mais sans doublon.

    Quelqu'un à une idée ?

    Merci :-)

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    le plus simple serait de faire le test dans le foreach et d'ajouter/créer le second tableau seulement si la valeur 'statut' n'est pas passée. Sinon tu peux utiliser in_array() sur ton tableau final. Est-ce que tu as toujours la même structure et les mêmes index ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 117
    Par défaut
    Bon ... à cette question, j'ai trouvé une réponse mais j'ai maintenant un autre souci ...

    Voici le code en question :

    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
     
    function sectionCSelect($field = "", $filter = "", $order = "")
        {
            $neededfield = xxSECTION_Cxx;
     
            list($mainField, $mainFrom) = explode("#", $neededfield);
            $mainFrom = explode("|", $mainFrom);
     
            if ($field != "" AND !is_array($field)) {
                list($secondField, $secondFrom) = explode("#", $field);
                $secondFrom = explode("|", $secondFrom);
     
                $finalField = $mainField . ',' . ' ' . $secondField;
                echo $finalField . '<br />';
     
                $diff = array_diff($secondFrom, $mainFrom);
                $finalFrom = array_merge($mainFrom, $diff);
                $finalFrom = implode(", ", $finalFrom);
            } else if ($field != "" AND is_array($field)) {
                foreach($field as $cle => $valeur) {
                    list($secondField, $secondFrom) = explode("#", $valeur);
                    $secondFrom = explode("|", $secondFrom);
     
                    foreach($secondFrom as $cle => $valeur) {
                        $finalFrom[] = $valeur;
                    } 
     
                    $finalField[] = $secondField;
                } 
                $finalFrom = array_merge($mainFrom, $finalFrom);
                $finalFrom = array_unique($finalFrom);
                $finalField[] = $mainField;
                $finalField = implode(", ", $finalField);
            } 
     
            print_r($finalFrom . '<br />');
            print_r($finalField . '<br />');
     
            $sql = "SELECT $finalField
    		FROM section_c, section, langue, menu, menu_c, endroit, statut, zone
    			WHERE section_c.section = section.id
    			AND section_c.langue = langue.id
    			AND section.menu = menu.id
    			AND section.endroit = endroit.id
    			AND section.statut = statut.id
    			AND menu.div = zone.id
    			AND menu.endroit = endroit.id
    			AND menu.statut = statut.id
    			AND menu_c.menu = menu.id
    			AND menu_c.langue = langue.id
    			AND langue.statut = statut.id
    			$filter
    			$order";
    J'appelle cette fonction grâce à ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $section = new Section_C();
    $select = $section->sectionCSelect(array(xxSECTIONxx, xxSTATUTxx));
    où xxSECTIONxx et xxSTATUTxx sont des constantes déclarées de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    define ("xxSECTIONxx", "section.id AS sectionID, section.section AS sectionSection, section.url AS sectionURL, section.ordre AS sectionOrdre#section|menu|endroit|statut");
    define ("xxSECTION_Cxx", "section_c.id AS sectionCID, section_c.nom AS sectionCNom, section_c.titre AS sectionCTitre, section_c.description AS sectionCDescription, section_c.keywords AS sectionCKeywords#section_c|section|langue");
    A la fin, je me retrouve donc avec 2 variables :
    - $finalField qui contient tout ce qui doit apparaitre avant le FROM
    - $finalFrom qui contient tout ce qui doit apparaitre dans le FROM

    Les 2 print_r que je fais juste avant la requête SQL me prouve que le contenu de ces 2 variables est correct car cela affiche ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    section_c, section, langue, menu, endroit, statut
     
    section_c.id AS sectionCID, section_c.nom AS sectionCNom, section_c.titre AS sectionCTitre, section_c.description AS sectionCDescription, section_c.keywords AS sectionCKeywords, section.id AS sectionID, section.section AS sectionSection, section.url AS sectionURL, section.ordre AS sectionOrdre
    Par contre, quand je lance ma requête en mettant donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT $finalField FROM $finalFrom ...
    J'ai ceci comme message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM WHERE section_c.section = section.id AND section_c.langue = langue' at line 2
    SELECT FROM WHERE section_c.section = section.id AND section_c.langue = langue.id AND section.menu = menu.id AND section.endroit = endroit.id AND section.statut = statut.id AND menu.div = zone.id AND menu.endroit = endroit.id AND menu.statut = statut.id AND menu_c.menu = menu.id AND menu_c.langue = langue.id AND langue.statut = statut.id AND statut.statut = 'OK' AND section.section = 'test'
    Donc en gros ... il semble qu'il ne prenne pas en compte mes variables alors que le print_r indique qu'elles sont OK.

    Une astuce pour moi ?

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

Discussions similaires

  1. [PHP 5.0] [Tableaux] Fonction scinder un array en 2 array égaux
    Par okoweb dans le forum Langage
    Réponses: 1
    Dernier message: 24/03/2009, 12h22
  2. [Tableaux] scinder une variable en php
    Par mitch46000 dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2007, 16h38
  3. [langage] erreurs utilisation tableaux 2 dimensions
    Par drosof dans le forum Langage
    Réponses: 11
    Dernier message: 01/07/2003, 11h44
  4. Réponses: 6
    Dernier message: 04/04/2003, 15h28
  5. Les tableaux en PL/SQL
    Par GRUMLY dans le forum PL/SQL
    Réponses: 5
    Dernier message: 12/08/2002, 18h10

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