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 :

Pb avec json et fichiers php [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 258
    Points : 151
    Points
    151
    Par défaut Pb avec json et fichiers php
    Salut,
    j'utilise des tableaux php que je transforme en format json , puis écrit des fichiers.
    Cependant ma méthode est assez artisanale, et je vous soumet du code qui je pense, peut être améliorer.
    Je voudrais qu'avec beaucoup moins d'instruction, j'arrive au même résultat.
    Peut-être, emploi de la méthode serialize() ?
    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
     
     <?php if (is_file(NOM_FICHIER_TAG)) 
        {
                $file  = file_get_contents(NOM_FICHIER_TAG);
                $count = 0;
                for ($i=0;$i<=strlen($file)-1;$i++)
                            {
                                if ($file[$i] == "{") $deb=$i;
     
                                if ($file[$i] == "}")
                                    {
                                        $fin=$i+1;
                                        $ligne_tag[$count]= substr($file,$deb,$fin-$deb);
                                        $count++;
                                    }
     
                            }
                $count = count($ligne_tag);            
     
                for ($i=0;$i<=$count-1;$i++)
                    {
                        $unparsed[$i] = json_decode($ligne_tag[$i]);
     
                    }            
     
                $count = count ($unparsed);
     
                for ($i=0;$i<=$count-1;$i++) 
                    {
                        foreach ($unparsed[$i] as $key => $value) 
                            {
                                if ($key=="tag") 
                                    {
                                        $tag[$i]=$value;
                                    }
                            }
     
     
                    }
                    $array_keywords = array_unique($tag); 
                    $keywords       = implode ( "," , $array_keywords );
                    //var_dump($tag);
                    //exit(0);
     
     
        }
        else $ligne_tag=NULL;
        ?>
    Comme vous le voyez, je lis ensuite le fichier json,découpe celui-ci en élément de tableau jusqu'à {},
    puis affecte la valeur $value à la clef $tag.
    Je suis pratiquement sûr qu'il existe un moyen plus simple.
    Le connaissez-vous ?
    `

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu peux poster un petit bout du fichier d'entrée, stp

  3. #3
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 008
    Points
    2 008
    Billets dans le blog
    1
    Par défaut
    Heu tu essayes d'écrire du JSON à la main ? Essaye la fonction json_encode plutôt

  4. #4
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 258
    Points : 151
    Points
    151
    Par défaut Détails sur fichier json
    Bon, voilà, je vous donne un extrait du fichier tag.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"tag":"billet d'humeur"}{"tag":"informatique"}
    Comme vous le voyez, c'est du json pur sucre.
    Voici maintenant comment je maintiens ce fichier à jour :
    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
     
    <?php
    		session_start();
     
    		set_error_handler ("handler");
     
    		if      ( isset($_POST["tag"])  
    			    ) 
    		{
    			if (is_file(NOM_FICHIER_TAG))
    				{
    					$file  = file_get_contents(NOM_FICHIER_TAG);
    					$unparsed=array();
    					$data = $file;
    					$count = 0;
     
    					for ($i=0;$i<=strlen($data)-1;$i++)
    						{
    							if ($data[$i] == "{") $deb=$i;
     
    							if ($data[$i] == "}")
    								{
    									$fin=$i+1;
    									$array[$count]= substr($data,$deb,$fin-$deb);
    									$count++;
    								}
     
    						}
    C'est la première partie du code: vous constaterez que je découpe le fichier " à la main".

    Voici la seconde partie :

    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
     
    for ($i=0;$i<=$count-1;$i++) 
    						{
    							$unparsed[$i] = json_decode($array[$i]);
                                                            ///**** C'EST LA QUE JE DECODE LE TABLEAU ********/
    						}
     
     
                                            /// JE CONVERTI LE NOUVEAU TAG AU FORMAT JSON PUIS L'AJOUTE AU TABLEAU *******/
    					$new_tag = $_POST["tag"];
    					$json_new_tag = json_encode(array("tag"=>$new_tag));
    					$unparsed_tag = json_decode($json_new_tag);
    					$unparsed[$i] = $unparsed_tag; 
     
    					$count = count($unparsed);
     
    					for ($i=0;$i<=$count-1;$i++) 
    						{
    							$parsed[$i] = json_encode($unparsed[$i]);
    						}
    					file_put_contents(NOM_FICHIER_TAG,$parsed);
    					header("Location: ../Vue/msg.nouveau.tag.php");
    Ce code consiste à lire un fichier json de tag s'il existe, puis à ajouter par l'intermédiaire d'un formulaire un nouveau tag.

    C'est dans la partie 1 que je cherche un algo plus propre.
    En effet, se promener dans le fichier pour tester les débuts et les fins d'accolades n'est pas très rigoureux.
    Connaissez-vous une autre méthode ?
    Merci pour votre aide.

  5. #5
    Membre extrêmement actif
    Avatar de Sodium
    Femme Profil pro
    Développeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Points : 2 008
    Points
    2 008
    Billets dans le blog
    1
    Par défaut
    Bah json_decode et après tu travailles sur le tableau résultant. Je ne comprends même pas ce que tu essayes de faire en fait.

  6. #6
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 258
    Points : 151
    Points
    151
    Par défaut A propos des accolades dans json
    Salut,
    Ce que je cherche, c'est une méthode pour lire ce qu'il y a entre les accolades.
    Est-ce que la fonction serialize fait ce genre de chose ?
    J'espère être clair.

  7. #7
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 258
    Points : 151
    Points
    151
    Par défaut EUREKA ! j'ai trouvé
    json_decode () retourne un objet du format tableau si on lui passe true en argument.
    L'affectation des variables devient alors infiniment plus pratique et l'algorithme bien plus " propre".

    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
     
    // Les crochets qui délimitent le JSON indiquent qu'il s'agit d'une collection de données
    $json_source = '[{"nom":"Adriana"}, {"nom":"Candice"}]';
     
    // On va boucler sur un tableau
    $json_data = json_decode($json_source, true);
    foreach($json_data as $v){
       echo $v['nom'].'<br>';
    }
     
    // On va boucler sur un objet
    $json_data = json_decode($json_source);
    foreach($json_data as $v){
       echo $v->nom.'<br>';
    }
    Merci en tous cas pour l'aide.

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

Discussions similaires

  1. [GD] Créer plusieurs images avec un seul fichier PHP
    Par remus69 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 10/04/2012, 12h29
  2. [Upload] formulaire php avec upload de fichier
    Par achos dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2007, 14h14
  3. Réponses: 7
    Dernier message: 10/06/2006, 14h31
  4. Réponses: 9
    Dernier message: 17/11/2005, 10h33
  5. Réponses: 2
    Dernier message: 19/08/2004, 17h12

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