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 :

function pour lire une clef d'un json


Sujet :

Langage PHP

  1. #1
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut function pour lire une clef d'un json
    Bonjour,

    Probleme avec ma function utilisée pour parcourir un json decode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $jsonFile = file_get_content('json.json');
    $json = json_decode($jsonFile);
    $find=KeySearch($json, 'bonjourajax');
     
    echo $find;
    Code php : 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
     
    // function permettant de trouver la valeur d'une key dans un json decode parexemple, 
    // seulement si cette key est unique dans l'objet
     
    function KeySearch($json, string $search)
    {
    	    foreach ($json as $key=>$val) {
     
                     // si c'est un array ou objet (stdclass) alors on parcoure l'objet
    	        if(is_array($val) || is_object($val)) {
    	            KeySearch($val, $search);
    	        }
     
    	        else if($key == $search) {
     
    			return $val;
                                   break;
    		}
    	    }
    	}

    La function ne marche que si je remplace return $val; par un echo $val; sinon elle ne retourne rien (pourquoi)
    Vous auriez une idée

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    C'est une fonction récursive avec un retour : il faut que tu retournes le retour de l'appel à la fonction à l'intérieur d'elle-même.
    ~~ Celira se relit, réalise que c'est incompréhensible, tente de reformuler, abandonne. ~~
    En bref :
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function KeySearch($json, string $search)
    {
        foreach($json as $key => $val) {
            // si c'est un array ou objet (stdclass) alors on parcoure l'objet
            if (is_array($val) || is_object($val)) {
                return KeySearch($val, $search);
            }
            else if ($key == $search) {
                return $val;
            }
        }
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		else if($key == $search)
    Erreur de logique
    • il faut écrire elseif (sans espace)
    • il manque un return false; (par défaut)
    • il faut toujours écouter Celira


    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
    function KeySearch($json, string $search)
    {
    	foreach ($json as $key=>$val)
    	{
    		// si c'est un array ou objet (stdclass) alors on parcoure l'objet
    		if(is_array($val) || is_object($val)) {
    			return KeySearch($val, $search);
    		}
    		elseif($key == $search)
    		{
    			return $val;
    			break;
    		}
    	}
    	return false;
    }

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Et au passage, le break après le return $val ne sert à rien
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Bonsoir,

    merci pour vos réponses , cependant la function return toujours null


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function KeySearch($json, string $search)
    {
    	foreach ($json as $key=>$val)
    	{
    		// si c'est un array ou objet (stdclass) alors on parcoure l'objet
    		if(is_array($val) || is_object($val)) {
    			return KeySearch($val, $search);
    		}
    		elseif($key == $search)
    		{
    			return $val;
    		}
    	}
    	return false;
    }

    Je peux vous mettre le JSON en question si besoin
    Par contre si je ddeclare des variable global a l'intérieur de la function alors la ca marche..

    un moment ou ou elle fonctionne est lorsqu'elle est écrite de cette façon :

    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
     
    function KeySearch($json, string $search)
    {
    	foreach ($json as $key=>$val)
    	{
    		// si c'est un array ou objet (stdclass) alors on parcoure l'objet
    		if(is_array($val) || is_object($val)) {
    			KeySearch($val, $search);
    		}
    		elseif($key == $search)
    		{
    			echo $val;
    		}
    	}
    	return false;
    }
    edit: le json en question:

    Code json : 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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    {
    	"id": "evt_1CWxfoFa1jDYIR5sI7",
    	"object": "event",
    	"api_version": "2018-01-23",
    	"created": 1527561296,
    	"data": {
    		"object": {
    			"id": "in_1CWxfoFa1jDYlf8FCEJExQir",
    			"object": "invoice",
    			"amount_due": 255,
    			"amount_paid": 255,
    			"amount_remaining": 0,
    			"application_fee": null,
    			"attempt_count": 0,
    			"attempted": true,
    			"billing": "charge_automatically",
    			"billing_reason": "subscription_update",
    			"charge": "ch_1CWxfoFa1jDYlf8",
    			"closed": true,
    			"currency": "eur",
    			"customer": "cus_CwrOrgzt",
    			"date": 1527561298,
    			"description": null,
    			"discount": null,
    			"due_date": null,
    			"ending_balance": 0,
    			"forgiven": false,
    			"lines": {
    				"object": "list",
    				"data": [{
    					"id": "bonjourajax",
    					"object": "line_item",
    					"amount": 199,
    					"currency": "eur",
    					"description": "bonjourajax",
    					"discountable": true,
    					"livemode": false,
    					"metadata": {},
    					"period": {
    						"end": 1528166096,
    						"start": 1527561296
    					},
    					"plan": {
    						"id": "plan_Cwq7FlNCg67vlH",
    						"object": "plan",
    						"aggregate_usage": null,
    						"amount": 199,
    						"billing_scheme": "per_unit",
    						"created": 1527556563,
    						"currency": "eur",
    						"interval": "week",
    						"interval_count": 1,
    						"livemode": false,
    						"metadata": {},
    						"name": "bonjourajax",
    						"nickname": "bonjourajax",
    						"product": "prod_Cwq61rkVXdzs6g",
    						"statement_descriptor": null,
    						"tiers": null,
    						"tiers_mode": null,
    						"transform_usage": null,
    						"trial_period_days": null,
    						"usage_type": "licensed"
    					},
    					"proration": false,
    					"quantity": 1,
    					"subscription": null,
    					"subscription_item": "si_CwrOpVbqyr5q6b",
    					"type": "subscription"
    				}],
    				"has_more": false,
    				"total_count": 1,
    				"url": "\/v1\/invoices\/in_1CWxfoFa1jDYlf8FCEJExQir\/lines"
    			},
    			"livemode": false,
    			"metadata": {},
    			"next_payment_attempt": null,
    			"number": "89CCF50-0001",
    			"paid": true,
    			"period_end": 1527561296,
    			"period_start": 1527561296,
    			"receipt_number": null,
    			"starting_balance": 0,
    			"statement_descriptor": null,
    			"subscription": "sub_CwrOB8kr4KLVf8",
    			"subtotal": 199,
    			"tax": null,
    			"tax_percent": null,
    			"total": 199,
    			"webhooks_delivered_at": null
    		}
    	},
    	"livemode": false,
    	"pending_webhooks": 1,
    	"request": {
    		"id": "req_l9nGAtGgSjwX5B",
    		"idempotency_key": null
    	},
    	"type": "invoice.payment_succeeded"
    }

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 997
    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 997
    Par défaut
    On ne peut pas écrire return KeySearch(...) dans la fonction, car au premier tableau ou objet rencontré la fonction s'interrompra (que la clef soit trouvée ou non) sans avoir parcouru le reste des clefs. Le seul appel de fonction qui devrait pouvoir retourner une valeur est l'appel qui ne soit pas récursif.

    Par exemple, en utilisant des variables statiques, on peut faire:
    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
    function keySearch($haystack, $needle) {
        static $result = [];
        static $level = 0;
     
        foreach($haystack as $key => $value) {
            if ($key === $needle)
                $result[] = $value;
     
            if ( is_array($value) || is_object($value) ) {
                $level++;
                keySearch($value, $needle);
                $level--;
            }
        }
     
        if ( !$level )
            return $result;
    }
     
    print_r(keySearch($json, 'uneclef'));
    Cette fonction cherche toutes les occurrences de la clef et stocke les valeurs (quel quelles soient) dans un tableau qui est ensuite retourné.

    Si on part du principe que la clef est unique et que par économie on veuille s'arrêter dés que la clef correspond, on pourrait écrire quelque chose comme:
    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
    function keySearch($haystack, $needle) {
        static $found = false;
     
        foreach($haystack as $key => $value) {
            if ($key === $needle) {
                $found = true;
                return $value;
            }
     
            if ( is_array($value) || is_object($value) ) {
                $result = keySearch($value, $needle);
                if ( $found )
                    return $result;
            }
        }
    }
    Mais ce code pose problème! Car il est impossible de savoir si la fonction renvoie NULL parce qu'elle n'a pas trouvée la clef ou parce que c'est la valeur de la clef. (Le même problème se posera si on choisit de renvoyer false ou 0). On peut solutionner ce problème en réécrivant la fonction de manière à ce quelle renvoie true ou false et en passant la variable du résultat par référence.


    Si le but est de ne retourner ni les objets, ni les tableaux, dans ce cas inutile de se casser la tête, il suffit de décoder le json en tableau multidimensionnel ($json = json_decode($text, true);) puis de parcourir les "feuilles" avec array_walk_recursive.

  7. #7
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Bonsoir CosmoKnacki
    Merci.
    Apres avoir essayé vos codes le 1er marche tres bien et le deuxieme renvoi un
    Catchable fatal error: Object of class stdClass could not be converted to string

    Je galère pour la lecture de valeur ciblé d'un json en PhP, c'est pour cela que j'ai essayé de créer une function, basée sur un simple var_dump(json_decode($j));
    Pouvez vous m'expliquer davantage vos solutions, merci

    (et par exemple si je veux seulement la clef "start" du json ci dessus comment dois je m'y prendre sans function?
    j'avais essayé un echo $json->data->object->lines->data[0]->period[0]->start qui evidemment ne marche pas)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    ...On ne peut pas écrire return KeySearch(...) dans la fonction, car au premier tableau ou objet rencontré la fonction s'interrompra (que la clef soit trouvée ou non)...
    J'avais aussi vu ce problème (en testant sur un json "maison" * ), et tenté de le résoudre... sans succès... (j'ai abandonné un peu vite...)
    Les fonctions récursives ne sont pas simples à gérer !

    ...Si on part du principe que la clef est unique...
    Ce n'était justement pas le cas de mon json "maison" *...

    ...puis de parcourir les "feuilles" avec array_walk_recursive...
    Heureusement qu'il y a des spécialistes !


    @bonjourajax
    * Montre-nous un EXEMPLE de fichier json à traiter.

  9. #9
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 997
    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 997
    Par défaut
    En regardant ton fichier json, j'ai comme un doute. Est-ce que tu cherches à obtenir la ou les valeurs pour une clef donnée, ou est-ce que tu cherches à obtenir la ou les clefs pour une valeur donnée?

    j'avais essayé un echo $json->data->object->lines->data[0]->period[0]->start qui evidemment ne marche pas)
    period est un objet pas un tableau.

  10. #10
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Voila le json en question

    Code json : 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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    {
    	"id": "evt_1CWxfoFa1jDYIR5sI7",
    	"object": "event",
    	"api_version": "2018-01-23",
    	"created": 1527561296,
    	"data": {
    		"object": {
    			"id": "in_1CWxfoFa1jDYlf8FCEJExQir",
    			"object": "invoice",
    			"amount_due": 255,
    			"amount_paid": 255,
    			"amount_remaining": 0,
    			"application_fee": null,
    			"attempt_count": 0,
    			"attempted": true,
    			"billing": "charge_automatically",
    			"billing_reason": "subscription_update",
    			"charge": "ch_1CWxfoFa1jDYlf8",
    			"closed": true,
    			"currency": "eur",
    			"customer": "cus_CwrOrgzt",
    			"date": 1527561298,
    			"description": null,
    			"discount": null,
    			"due_date": null,
    			"ending_balance": 0,
    			"forgiven": false,
    			"lines": {
    				"object": "list",
    				"data": [{
    					"id": "bonjourajax",
    					"object": "line_item",
    					"amount": 199,
    					"currency": "eur",
    					"description": "bonjourajax",
    					"discountable": true,
    					"livemode": false,
    					"metadata": {},
    					"period": {
    						"end": 1528166096,
    						"start": 1527561296
    					},
    					"plan": {
    						"id": "plan_Cwq7FlNCg67vlH",
    						"object": "plan",
    						"aggregate_usage": null,
    						"amount": 199,
    						"billing_scheme": "per_unit",
    						"created": 1527556563,
    						"currency": "eur",
    						"interval": "week",
    						"interval_count": 1,
    						"livemode": false,
    						"metadata": {},
    						"name": "bonjourajax",
    						"nickname": "bonjourajax",
    						"product": "prod_Cwq61rkVXdzs6g",
    						"statement_descriptor": null,
    						"tiers": null,
    						"tiers_mode": null,
    						"transform_usage": null,
    						"trial_period_days": null,
    						"usage_type": "licensed"
    					},
    					"proration": false,
    					"quantity": 1,
    					"subscription": null,
    					"subscription_item": "si_CwrOpVbqyr5q6b",
    					"type": "subscription"
    				}],
    				"has_more": false,
    				"total_count": 1,
    				"url": "\/v1\/invoices\/in_1CWxfoFa1jDYlf8FCEJExQir\/lines"
    			},
    			"livemode": false,
    			"metadata": {},
    			"next_payment_attempt": null,
    			"number": "89CCF50-0001",
    			"paid": true,
    			"period_end": 1527561296,
    			"period_start": 1527561296,
    			"receipt_number": null,
    			"starting_balance": 0,
    			"statement_descriptor": null,
    			"subscription": "sub_CwrOB8kr4KLVf8",
    			"subtotal": 199,
    			"tax": null,
    			"tax_percent": null,
    			"total": 199,
    			"webhooks_delivered_at": null
    		}
    	},
    	"livemode": false,
    	"pending_webhooks": 1,
    	"request": {
    		"id": "req_l9nGAtGgSjwX5B",
    		"idempotency_key": null
    	},
    	"type": "invoice.payment_succeeded"
    }

  11. #11
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    En regardant ton fichier json, j'ai comme un doute. Est-ce que tu cherches à obtenir la ou les valeurs pour une clef donnée, ou est-ce que tu cherches à obtenir la ou les clefs pour une valeur donnée?
    Je cherche bien à obtenir les valeurs pour une clée choisie
    exemple je cherche la valeur de la clef "id" dans "object" dans "data"


    Car j'ai connaissance du nom des clefs ayant récupéré les json dans un premier temps (et ils ont tous la meme structure)
    Mais je n'ai besoin que de quelques valeurs, non le json entier

  12. #12
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 997
    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 997
    Par défaut
    Si tu connais par avance l'arborescence du json pas besoin de fonction, il suffit de donner le chemin (sans se tromper):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $json->data->object->lines->data[0]->period->start;

  13. #13
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Merci, effectivement j'avais mal lu le var_dump()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $json->data->object->lines->data[0]->period->start;
    me donne bien la valeur choisie...

    Pour la function "econome"

    Code php : 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
     
    function keySearch($haystack, $needle) {
        static $result = [];
        static $level = 0;
     
       if(!empty($result[0])) {
       return $result[0];
       }
     
        foreach($haystack as $key => $value) {
            if ($key === $needle)
                $result[] = $value;
     
            if ( is_array($value) || is_object($value) ) {
                $level++;
                keySearch($value, $needle);
                $level--;
            }
        }
     
        if ( !$level )
            return $result;
    }

  14. #14
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 997
    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 997
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Heureusement qu'il y a des spécialistes !
    J'avais pour idée de faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $jsonText = file_get_contents('json.json');
    $json = json_decode($jsonText, true);
     
    $result = [];
    $needle = 'id';
     
    array_walk_recursive($json, function ($value, $key) use ($needle, &$result) {
        if ( $key === $needle )
            $result[] = $value;
    });
     
    var_dump($result);
    Si je parle de "feuilles", c'est par rapport à l'analogie entre un tableau multidimensionnel et un arbre. Les feuilles sont les éléments du tableau dont la valeur n'est pas un autre tableau. Je le précise car contrairement à ce qu'on peut croire au premier abord, array_walk_recursive ne parcourt pas tous les éléments d'un tableau multidimensionnel, il ne parcourt que les feuilles.

    Donc un tel code ne marchera pas si on veut obtenir la valeur de la clef "data" par exemple.

  15. #15
    Membre chevronné
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Par défaut
    Ca ressemble au js,
    En tout cas c'est super comme technique je connaissais pas
    Merci

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

Discussions similaires

  1. sizeof dans une fonction pour lire une chaine
    Par Haze. dans le forum Débuter
    Réponses: 11
    Dernier message: 06/11/2007, 13h07
  2. Problème pour lire une datatable
    Par kikitx dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/08/2007, 21h19
  3. Gros problème pour lire une vidéo
    Par zoidy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/06/2006, 13h35
  4. [XHTML] Balise OBJECT pour lire une vidéo...
    Par zoidy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 02/06/2006, 11h21
  5. Pb pour lire une video
    Par polevault dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/01/2006, 01h21

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