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 :

Grouper selon la catégorie


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 64
    Points
    64
    Par défaut Grouper selon la catégorie
    Bonjour,

    J'ai un fichier json, et je veux lire le fichier et grouper les éléments selon la catégorie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [
    	{"article_name_en": "Trousers","article_name_sub_en": "Simple trouser"}, 
    	{"article_name_en": "Trousers","article_name_sub_en": "Combi-trousers"}, 
    	{"article_name_en": "Trousers","article_name_sub_en": "Jeans"}, 
    	{"article_name_en": "Dresses","article_name_sub_en": "Night Dresses"}, 
    	{"article_name_en": "Dresses","article_name_sub_en": "Simple dresses"}, 
    	{"article_name_en": "Dresses","article_name_sub_en": "Wedding dresses"}
    ]
    Je cherche un truc comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    +Trousers
    Simple trouser
    Combi-trousers
    Jeans
     
    +Dresses
    Night Dresses
    Simple dresses
    Wedding dresses
    Merci a vous

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu dois simplement écrire la catégorie quand elle change :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ar = (json_decode($json,TRUE));
     
    $cur_name = '';
    foreach ($ar as $values) {
    	if ($values['article_name_en'] != $cur_name) {
    		echo '+' . $values['article_name_en'] . '<br/>';
    		$cur_name = $values['article_name_en'];
    	}
    	echo $values['article_name_sub_en'] . '<br/>';	
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Après si tu dois faire plus de manipulation, moi j'utilise les collections de Laravel.
    Il existe un dépôt pour ne prendre que les collections

    D'abord le composer

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    composer require tightenco/collect

    Ensuite dans ton fichier

    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
     
    <?php
    require 'vendor/autoload.php';
     
    $json = '[
    	{
            "article_name_en": "Trousers","article_name_sub_en": "Simple trouser"},
    	{
            "article_name_en": "Trousers","article_name_sub_en": "Combi-trousers"},
    	{
            "article_name_en": "Trousers","article_name_sub_en": "Jeans"},
    	{
            "article_name_en": "Dresses","article_name_sub_en": "Night Dresses"},
    	{
            "article_name_en": "Dresses","article_name_sub_en": "Simple dresses"},
    	{
            "article_name_en": "Dresses","article_name_sub_en": "Wedding dresses"}
    ]';
     
    $collection = collect((json_decode($json, TRUE)));
     
    $grouped = $collection->groupBy('article_name_en');
     
    var_dump($grouped->toArray());
    /**
    array(size = 2)
      'Trousers' =>
        array(size = 3)
          0 =>
            array(size = 2)
              'article_name_en' => string 'Trousers' (length = 8)
              'article_name_sub_en' => string 'Simple trouser' (length = 14)
          1 =>
            array(size = 2)
              'article_name_en' => string 'Trousers' (length = 8)
              'article_name_sub_en' => string 'Combi-trousers' (length = 14)
          2 =>
            array(size = 2)
              'article_name_en' => string 'Trousers' (length = 8)
              'article_name_sub_en' => string 'Jeans' (length = 5)
      'Dresses' =>
        array(size = 3)
          0 =>
            array(size = 2)
              'article_name_en' => string 'Dresses' (length = 7)
              'article_name_sub_en' => string 'Night Dresses' (length = 13)
          1 =>
            array(size = 2)
              'article_name_en' => string 'Dresses' (length = 7)
              'article_name_sub_en' => string 'Simple dresses' (length = 14)
          2 =>
            array(size = 2)
              'article_name_en' => string 'Dresses' (length = 7)
              'article_name_sub_en' => string 'Wedding dresses' (length = 15)
    */
    L'avantage pour moi est qu'on peut ensuite utiliser toute une série de méthodes dont la doc se trouve ici

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 64
    Points
    64
    Par défaut
    La réponse est bonne, mais une utilisation ultérieur, est ce que je peux les grouper en tableau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Array(
    Trousers=>Array(Simple trouser, Combi-trousers, Jeans),
    Dresses=>Array(Night Dresses, Simple dresses, Wedding dresses)
    )

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Dans ce cas, il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $result = [];
     
    foreach(json_decode($json, true) as $v) {
        $result[$v['article_name_en']][] = $v['article_name_sub_en'];
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 171
    Points : 64
    Points
    64
    Par défaut
    Merci à vous

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

Discussions similaires

  1. Grouper selon des critères
    Par diflow69 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/01/2014, 17h15
  2. macro pour lister le nom des étudiants selon une catégorie
    Par stefany83 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2010, 12h18
  3. [Spip] Affichage de produits selon une catégorie donnée
    Par antitrust56 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/04/2008, 17h37
  4. Grouper selon un nombre de jours
    Par soltani1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/10/2007, 08h55
  5. Grouper selon couleur de fonds des cellules
    Par vinfranaur dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/08/2006, 10h02

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