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] retravailler un array


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut [Tableaux] retravailler un array
    Bonjour à tous !

    voilà ma question, car je ne vois pas comment y remédier de façon rapide !

    j'ai un array tel que :

    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
     
    [MonArray] => Array
            (
                [0] => Array
                    (
                        [id] => 234
                        [valeur1] => Ma Valeur 1 de 234
                        [valeur2] => Ma Valeur 2 de 234
                    }
     
                [1] => Array
                    (
                        [id] => 235
                        [valeur1] => Ma Valeur 1 de 235
                        [valeur2] => Ma Valeur 2 de 235
                    }
     
                ... etc
    J'aimerai que ce tableau devienne sous la forme :

    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
     
    [MonArray] => Array
            (
                [234] => Array
                    (
                        [id] => 234
                        [valeur1] => Ma Valeur 1 de 234
                        [valeur2] => Ma Valeur 2 de 234
                    }
     
                [235] => Array
                    (
                        [id] => 235
                        [valeur1] => Ma Valeur 1 de 235
                        [valeur2] => Ma Valeur 2 de 235
                    }
     
                ... etc
    voilà, si quelqu'un peut m'aider ! Y'a t'il une fonction array_?? qui ferai ça rapidement ?

    Merci beaucoup

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Points : 85
    Points
    85
    Par défaut
    De quelle façon obtiens tu ton tableau ? Car il serait plus judicieux de le construire directement avec la bonne structure. De plus dans le tableau que tu veux obtenir, il y a une redondance d'information, tu n'est pas obligé de mettre l'id et en clé, et en valeur.

    Sinon tu peux faire de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $arrayBase; // Ton array
    $newArray = array();
    foreach($arrayBase as $result){
        $newArray[$result['id']] = array(
            'id'       => $result['id'] // Non necessaire à mon avis
            'valeur1' => $result['valeur1']
            'valeur2' => $result['valeur2']
        );
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    oui, ça je l'ai déjà fait ! mais il existe pas une fonction pour rapide pour ça ?

    car j'ai plusieurs algo de ce type à placer, et je me vois mal reproduire 10 fois le code !

    à moins que je créer une fonction exprès ! pourquoi pas !

    Merci en tout cas
    Dernière modification par Thes32 ; 24/07/2009 à 10h00. Motif: Sms

  4. #4
    darthmower
    Invité(e)
    Par défaut
    Citation Envoyé par liandri Voir le message
    à moins que je créer une fonction exprès ! pk pas !
    Ca sert à ça les fonctions, les APIs ne peuvent pas satisfaire tout le monde il y a toujours un peu de code à taper.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Points : 85
    Points
    85
    Par défaut
    bé ouai !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function transformeArray($arrayBase){ // Ton array
        $newArray = array();
        foreach($arrayBase as $result){
            $newArray[$result['id']] = array(
                'id'       => $result['id'] // Non necessaire à mon avis
                'valeur1' => $result['valeur1']
                'valeur2' => $result['valeur2']
            );
        }
        return $newArray;
    }
    Mais le plus simple et le mieux reste de bien le construire dès le début ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    malheureusement je peux pas le construire dès le début car c'est un parse d'un fichier xml que je transforme ensuite en array php avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $xml = simplexml_load_string(file_get_contents('mon_fichier_xml.xml'));
    		$xml = xml2phpArray($xml, array());
    En plus, toujours dans le même ordre d'idée, y'a vraimen un truc étrange qui se passe !

    je pars maintenant de 2 array :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Array1
    (
        [62] => Catégorie 62
        [64] => Catégorie 64
        [86] => Catégorie 86
        [67] => Catégorie 67
    )
    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
     
    Array2
    (
    	[0] => Array
    		(
    			[id_categorie] => 62
    			[ref] => 12
    			[titre] => Mon titre 12
    		)
     
    	[1] => Array
    		(
    			[id_categorie] => 62
    			[ref] => 3
    			[titre] => Mon titre 3
    		)
     
    	[2] => Array
    		(
    			[id_categorie] => 64
    			[ref] => 11
    			[titre] => Mon titre 11
    		)
     
    	[3] => Array
    		(
    			[id_categorie] => 86
    			[ref] => 5
    			[titre] => Mon titre 5
    		)
     
    	[4] => Array
    		(
    			[id_categorie] => 87
    			[ref] => 7
    			[titre] => Mon titre 7
    		)
    )
    J'ai créé un code qui devrai normalement me donner au final :
    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
     
    ArrayFinal
    (
    	[62] => Array
    		(
    			[12] => Mon titre 12
    			[3] => Mon titre 3
    		)
    	[64] => Array
    		(
    			[11] => Mon titre 11
    		)
    	[86] => Array
    		(
    			[5] => Mon titre 5
    		)
    	[67] => Array
    		(
    			[7] => Mon titre 7
    		)
    )
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if ($Array1 && $Array2) {
    	foreach($Array1 As $Key_1 => $Value_1) {
    		foreach($Array2 As $Key_2 => $Value_2) {
    			if ($Key_1 == $Value_2["id_categorie"]) {
    				$ArrayFinal[$Key_1][$Value_2["ref"]] = $Value_2["titre"];
    			}
    		}
    	}
    }
    Malheureusement, la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($Key_1 == $Value_2["id_categorie"])
    ne passe pas cette étape et donc ne charge pas la contenu !
    j'ai même essayé de passe un intval(), tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (intval($Key_1) == int($Value_2["id_categorie"]))
    Mais idem, ça ne fonctionne toujours pas avec cette condition ! pourtant les valeurs de sortie existent bien pour $Key_1 et $Value_2["id_categorie"]

    je sais pas quoi penser !

    Merci pour votre aide !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Points : 85
    Points
    85
    Par défaut
    Tu pourrai tout de même créer toi même ton tableau à partir du XML en faisant ta propre fonction xml2phpArray(), avec simple XML ce n'est pas beaucoup plus dur que la manipulation de tableau.

    Sinon ici ton algorithme me parait bon a première vue. Il n'y a qu'une chose qui m'étonne c'est la façon du test l'existance des tableaux. tu devrait utiliser is_array() ou isset(). Je ne sais pas si ça marche comme ça.
    As tu essayé d'afficher $Key_1 et $Value_2["id_categorie"] pour les comparer ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    oui ! en enlevant la condition et en modifiant la sortie pour voir les valeurs, soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //if ($Key_1 == $Value_2["id_categorie"]) {
        $ArrayFinal[$Key_1][$Value_2["ref"]] = $Value_2["id_categorie"];
    //}
    il me donne bien en sortie :
    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
     
    ArrayFinal
    (
    	[62] => Array
    		(
    			[12] => 62
    			[3] => 62
    			[11] => 64
    			[5] => 86
    			[7] => 67
    		)
    	[64] => Array
    		(
    			[12] => 62
    			[3] => 62
    			[11] => 64
    			[5] => 86
    			[7] => 67
    		)
    	[86] => Array
    		(
    			[12] => 62
    			[3] => 62
    			[11] => 64
    			[5] => 86
    			[7] => 67
    		)
    	[67] => Array
    		(
    			[12] => 62
    			[3] => 62
    			[11] => 64
    			[5] => 86
    			[7] => 67
    		)
    )
    je comprends vraiment pas pourquoi il veut pas comparer 62 et 62 ! etc...

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Points : 186
    Points
    186
    Par défaut
    Dans ta dernière boucle, essaye de mettre un unset() de ta variable $Key_1 et $Key_2. Un peu comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if ($Array1 && $Array2) {
    	foreach($Array1 As $Key_1 => $Value_1) {
    		foreach($Array2 As $Key_2 => $Value_2) {
    			if ($Key_1 == $Value_2["id_categorie"]) {
    				$ArrayFinal[$Key_1][$Value_2["ref"]] = $Value_2["titre"];
    			}
    		}
                 unset($Key_2);
    	}
         unset($Key_1);
    }
    Normalement, dans un foreach, la dernière valeur traité est conservé.
    Je ne suis pas sur de ce que je dis. Mais ça peut être dû à ça étant donné que ton code est correct.

Discussions similaires

  1. [Tableaux] passer un array d'une page à une autre
    Par 18Marie dans le forum Langage
    Réponses: 5
    Dernier message: 25/06/2006, 22h42
  2. [Tableaux] Trier un array
    Par borgfabr dans le forum Langage
    Réponses: 11
    Dernier message: 23/04/2006, 15h13
  3. [Tableaux] Accesseur et Array
    Par Philsmile dans le forum Langage
    Réponses: 5
    Dernier message: 30/03/2006, 12h06
  4. [Tableaux] Envoyer un Array par un form method get
    Par Zen_Fou dans le forum Langage
    Réponses: 4
    Dernier message: 22/03/2006, 19h51
  5. [Tableaux] Gérer une array...
    Par kult dans le forum Langage
    Réponses: 7
    Dernier message: 16/11/2005, 17h03

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