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 :

Lecture d'un objet stdclass


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut Lecture d'un objet stdclass
    Voici l'objet en question pour commencer :
    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
    stdClass Object
    (
        [TotalRecords] => 1
        [TransactionCollection] => stdClass Object
            (
                [Transaction] => stdClass Object
                    (
                        [BasketInfo] => stdClass Object
                            (
                                [BasketId] => 327051132
                                [OpenBasketItemCount] => 1
                                [RegisteredNetPrice] => 64.12
                                [TotalBasketItemCount] => 1
                            )
     
                        [CancellationReason] => 
                        [CheckDate] => 
                        [ClickDate] => 2017-11-04T14:07:26
                        [CreativeInfo] => stdClass Object
                            (
                                [CreativeNumber] => 24
                                [CreativeType] => Banner
                            )
     
                        [NetPrice] => 64.12
                        [ProgramId] => 15307
                        [ProgramTitle] => Croquetteland
                        [PublisherCommission] => 2.56
                        [RateInfo] => 
                        [RegistrationDate] => 2017-11-04T14:10:50
                        [SubId] => mike34
                        [TrackingMethod] => PostClick
                        [TransactionId] => 301234315
                        [TransactionStatus] => Open
                    )
     
            )
     
    )
    Rien de compliqué à première vue mais ...
    Ensuite voici mon code pour le traiter, $response contient l'objet stdclass :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $nbrep=$response->TotalRecords;
    if ($nbrep>0){
    print_r($response);
    foreach ($response->TransactionCollection->Transaction as $event) {
    print_r($event);
    $idachat=trim($event->TransactionId);
    }
    }
    Je récupère parfaitement TotalRecords le vrai souci se passe dans la boucle foreach, $event est supposé contenir toutes les "transactions".
    Ma ligne : $idachat=trim($event->TransactionId); renvoie l'erreur suivante Notice: Undefined property: stdClass::$TransactionId j'ai donc eu l'idée de faire un print_r sur $event sur la variable qui contient la transaction et là mauvaise surprise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    stdClass Object
    (
        [BasketId] => 327051132
        [OpenBasketItemCount] => 1
        [RegisteredNetPrice] => 64.12
        [TotalBasketItemCount] => 1
    )
    Où est le reste ???
    Merci d'avance si vous avez une idée de pourquoi je rencontre ce souci

  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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    ça m'a tout l'air d'être ton objet BasketInfo que tu affiches là.
    Le problème vient sans doute de ton foreach : foreach appliqué à un objet parcourt toutes les propriétés. En fait, je ne vois pas bien à quoi est censé servir ce foreach : tu as un object TransactionCollection qui contient un object Transcation. Un foreach n'a d'intérêt que si il y a un tableau à parcourir
    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
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Il y a normalement soit une transaction soit plusieurs d'où le foreach. Sinon effectivement il ressort le basketinfo et pas le reste et je ne comprends pas pourquoi

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Ce code fonctionne peut-être quand il y a plusieurs transactions.
    Mais quand il y en a une seule, vous trouverez surement votre information en lisant "$response->TransactionCollection->Transaction->TransactionId"

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Alors si j'accède directement et donc sans boucle à l'objet stdclass çà fonctionne...
    echo $response->TransactionCollection->Transaction->SubId;
    Mais le souci c'est comment on va faire quand il y en a plusieurs de transaction ? Et donc normalement il faudrait une boucle

  6. #6
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Le plus simple serait peut-être que tu fasses un essai plusieurs transactions et que tu affiches ton objet, histoire qu'on voit à quoi ressemble ton objet TransactionCollection dans ce cas.
    Dans le pire des cas, je pense que tu pourrais faire un test sur la propriété TotalRecords, qui m'a tout à l'air d'être le nombre de transactions : si ça vaut 1, tu accèdes directement à l'objet ; si ça vaut au moins 2, tu boucles.
    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]

  7. #7
    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
    Ta boucle n'est pas bonne, pour avoir toutes les transactions avec le foreach, il faut boucler sur $response->TransactionCollection et pas sur $response->TransactionCollection->Transaction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($response->TransactionCollection as $transaction) {
        echo $transaction->TransactionId, PHP_EOL;
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Merci ça fonctionne
    Je ne sais pas pourquoi il me semblait que c'est sur transaction qu'il fallait boucler. Normalement c'est tous les [transaction] que je cherchais à traiter mais bizarrement il faut boucler sur l'élément juste au dessus.

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Finalement il reste un souci, il s'avère que lorsqu'il y a plusieurs lignes cela ne fonctionne plus

    Voici l'objet stdclass quand il y a plusieurs lignes :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    stdClass Object
    (
        [TotalRecords] => 2
        [TransactionCollection] => stdClass Object
            (
                [Transaction] => Array
                    (
                        [0] => stdClass Object
                            (
                                [BasketInfo] =>
                                [CancellationReason] =>
                                [CheckDate] => 2018-02-20T00:00:00
                                [ClickDate] => 2018-02-03T22:04:00
                                [CreativeInfo] => stdClass Object
                                    (
                                        [CreativeNumber] => 9
                                        [CreativeType] => Banner
                                    )
     
                                [NetPrice] => 49.45
                                [ProgramId] => 12436
                                [ProgramTitle] => Bitiba.fr
                                [PublisherCommission] => 0
                                [RateInfo] => stdClass Object
                                    (
                                        [IsTieredCommission] =>
                                        [RateDescription] => Rémunération Nouveaux Clients
                                        [RateMode] => PayPerSale
                                        [RateNumber] => 2
                                        [RateValue] => 0
                                    )
     
                                [RegistrationDate] => 2018-02-03T22:06:19
                                [SubId] => helenehc
                                [TrackingMethod] => PostClick
                                [TransactionId] => 309446775
                                [TransactionStatus] => Confirmed
                            )
     
                        [1] => stdClass Object
                            (
                                [BasketInfo] =>
                                [CancellationReason] =>
                                [CheckDate] => 2018-02-20T00:00:00
                                [ClickDate] => 2018-02-03T22:04:00
                                [CreativeInfo] => stdClass Object
                                    (
                                        [CreativeNumber] => 9
                                        [CreativeType] => Banner
                                    )
     
                                [NetPrice] => 49.45
                                [ProgramId] => 12436
                                [ProgramTitle] => Bitiba.fr
                                [PublisherCommission] => 1.98
                                [RateInfo] => stdClass Object
                                    (
                                        [IsTieredCommission] =>
                                        [RateDescription] => Vente
                                        [RateMode] => PayPerSale
                                        [RateNumber] => 1
                                        [RateValue] => 4
                                    )
     
                                [RegistrationDate] => 2018-02-03T22:06:18
                                [SubId] => helenehc
                                [TrackingMethod] => PostClick
                                [TransactionId] => 309446774
                                [TransactionStatus] => Confirmed
                            )
     
                    )
     
            )
     
    )
    Cet objet est dans la variable $response et voici le code php qui fonctionne sur une ligne mais pas sur deux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($response->TransactionCollection as $event) {
        $idachat=trim($event->TransactionId); //ligne 45
    }
    Voici l'erreur de code php que j'obtiens :

    Notice: Trying to get property of non-object in vente.php on line 45

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 22
    Points
    22
    Par défaut
    Bonjour,

    Dans le dernier cas où il y a plusieurs lignes, tel que vous l'avez décrit, vous pourriez essayer de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($response->TransactionCollection as $transaction) {
    	foreach ($transaction as $key => $ligneTransaction) {
    		echo $ligneTransaction->TransactionId, PHP_EOL;
    	}
    }
    Il y a quelque chose que je note dans votre nouvelle description de l'objet $response, c'est que Transaction est un Array et non pas un objet. De ce fait, quand vous faites $event->TransactionId (sachant que $event représente Transaction), vous utilisez Transaction comme un objet alors que c'est un Array.

    J'ai testé le code que je vous ai écrit ci-dessus et, chez moi, il marche aussi bien dans le cas où Transaction est un array que dans le cas où il est un objet.

    En espérant que cela puisse vous être utile.

    Bonne soirée.

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Oui le code fonctionne mais n'est pas super logique car on boucle sur transactioncollection alors qu'il ne peut pas y en avoir plusieurs. Les transactions oui mais pas transactioncollection. Le mieux aurait été d'accéder directement aux transactions.
    [Transaction] est un objet stdclass de [TransactionCollection] et est un tableau contenant autant de ligne que de transactions. L'objectif pour moi est de faire une boucle sur le tableau de [Transaction], je suppose qu'il y a un moyen assez facile et cohérent de le faire mais je galère un peu dans la compréhension de ces objets stdclass de malheur
    $response->TransactionCollection permet d'accéder à l'objet TransactionCollection

    EDIT : Après des recherches j'ai testé : foreach ($response->TransactionCollection->Transaction as $event) {
    et çà marche quand il y a plusieurs résultats mais ça ne marche plus quand il y en a qu'un dedans. Le code STDCLASS est différent quand il y en a 1 ou plusieurs...
    Si il y en a 1 ça donne ça (en fait il contient un objet stdclass et sinon c'est un tableau :
    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
    stdClass Object
    (
        [TotalRecords] => 1
        [TransactionCollection] => stdClass Object
            (
                [Transaction] => stdClass Object
                    (
                        [BasketInfo] => 
                        [CancellationReason] => 
                        [CheckDate] => 
                        [ClickDate] => 2018-02-08T10:23:30
                        [CreativeInfo] => stdClass Object
                            (
                                [CreativeNumber] => 9
                                [CreativeType] => Banner
                            )
     
                        [NetPrice] => 70.82
                        [ProgramId] => 12436
                        [ProgramTitle] => Bitiba.fr
                        [PublisherCommission] => 2.83
                        [RateInfo] => stdClass Object
                            (
                                [IsTieredCommission] => 
                                [RateDescription] => Vente
                                [RateMode] => PayPerSale
                                [RateNumber] => 1
                                [RateValue] => 4
                            )
     
                        [RegistrationDate] => 2018-02-08T10:30:26
                        [SubId] => Chatou
                        [TrackingMethod] => PostClick
                        [TransactionId] => 309812702
                        [TransactionStatus] => Open
                    )
     
            )
     
    )
    Et quand il y en a 2 voilà le code :
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    stdClass Object
    (
        [TotalRecords] => 2
        [TransactionCollection] => stdClass Object
            (
                [Transaction] => Array
                    (
                        [0] => stdClass Object
                            (
                                [BasketInfo] => 
                                [CancellationReason] => 
                                [CheckDate] => 2018-02-20T00:00:00
                                [ClickDate] => 2018-02-03T22:04:00
                                [CreativeInfo] => stdClass Object
                                    (
                                        [CreativeNumber] => 9
                                        [CreativeType] => Banner
                                    )
     
                                [NetPrice] => 49.45
                                [ProgramId] => 12436
                                [ProgramTitle] => Bitiba.fr
                                [PublisherCommission] => 0
                                [RateInfo] => stdClass Object
                                    (
                                        [IsTieredCommission] => 
                                        [RateDescription] => Rémunération Nouveaux Clients
                                        [RateMode] => PayPerSale
                                        [RateNumber] => 2
                                        [RateValue] => 0
                                    )
     
                                [RegistrationDate] => 2018-02-03T22:06:19
                                [SubId] => helenehc
                                [TrackingMethod] => PostClick
                                [TransactionId] => 309446775
                                [TransactionStatus] => Confirmed
                            )
     
                        [1] => stdClass Object
                            (
                                [BasketInfo] => 
                                [CancellationReason] => 
                                [CheckDate] => 2018-02-20T00:00:00
                                [ClickDate] => 2018-02-03T22:04:00
                                [CreativeInfo] => stdClass Object
                                    (
                                        [CreativeNumber] => 9
                                        [CreativeType] => Banner
                                    )
     
                                [NetPrice] => 49.45
                                [ProgramId] => 12436
                                [ProgramTitle] => Bitiba.fr
                                [PublisherCommission] => 1.98
                                [RateInfo] => stdClass Object
                                    (
                                        [IsTieredCommission] => 
                                        [RateDescription] => Vente
                                        [RateMode] => PayPerSale
                                        [RateNumber] => 1
                                        [RateValue] => 4
                                    )
     
                                [RegistrationDate] => 2018-02-03T22:06:18
                                [SubId] => helenehc
                                [TrackingMethod] => PostClick
                                [TransactionId] => 309446774
                                [TransactionStatus] => Confirmed
                            )
     
                    )
     
            )
     
    )
    Pour ceux qui maîtrise bien les objets STDCLASS est-ce cohérent de faire ça ??? Donc si 1 transaction on met un objet et si plusieurs on met un tableau ?
    Si c'est cohérent ça oblige quand même à développer un truc spécial selon les cas c'est le bordel...

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 22
    Points
    22
    Par défaut
    Re-bonsoir,

    Je suggérerais de conserver votre code initial aussi bien si vous avez une ou plusieurs lignes.

    Si vous avez une seule ligne, écrivez comme ceci :

    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
    stdClass Object
    (
        [TotalRecords] => 2
        [TransactionCollection] => stdClass Object
            (
                [Transaction] => Array
                    (
                        [0] => stdClass Object
                            (
                                [BasketInfo] =>
                                [CancellationReason] =>
                                [CheckDate] => 2018-02-20T00:00:00
                                [ClickDate] => 2018-02-03T22:04:00
                                [CreativeInfo] => stdClass Object
                                    (
                                        [CreativeNumber] => 9
                                        [CreativeType] => Banner
                                    )
     
                                [NetPrice] => 49.45
                                [ProgramId] => 12436
                                [ProgramTitle] => Bitiba.fr
                                [PublisherCommission] => 0
                                [RateInfo] => stdClass Object
                                    (
                                        [IsTieredCommission] =>
                                        [RateDescription] => Rémunération Nouveaux Clients
                                        [RateMode] => PayPerSale
                                        [RateNumber] => 2
                                        [RateValue] => 0
                                    )
     
                                [RegistrationDate] => 2018-02-03T22:06:19
                                [SubId] => helenehc
                                [TrackingMethod] => PostClick
                                [TransactionId] => 309446775
                                [TransactionStatus] => Confirmed
                            )
     
     
                    )
     
            )
     
    )

    Et s'il y en a plusieurs, écrivez comme ceci :


    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    stdClass Object
    (
        [TotalRecords] => 2
        [TransactionCollection] => stdClass Object
            (
                [Transaction] => Array
                    (
                        [0] => stdClass Object
                            (
                                [BasketInfo] =>
                                [CancellationReason] =>
                                [CheckDate] => 2018-02-20T00:00:00
                                [ClickDate] => 2018-02-03T22:04:00
                                [CreativeInfo] => stdClass Object
                                    (
                                        [CreativeNumber] => 9
                                        [CreativeType] => Banner
                                    )
     
                                [NetPrice] => 49.45
                                [ProgramId] => 12436
                                [ProgramTitle] => Bitiba.fr
                                [PublisherCommission] => 0
                                [RateInfo] => stdClass Object
                                    (
                                        [IsTieredCommission] =>
                                        [RateDescription] => Rémunération Nouveaux Clients
                                        [RateMode] => PayPerSale
                                        [RateNumber] => 2
                                        [RateValue] => 0
                                    )
     
                                [RegistrationDate] => 2018-02-03T22:06:19
                                [SubId] => helenehc
                                [TrackingMethod] => PostClick
                                [TransactionId] => 309446775
                                [TransactionStatus] => Confirmed
                            )
     
                        [1] => stdClass Object
                            (
                                [BasketInfo] =>
                                [CancellationReason] =>
                                [CheckDate] => 2018-02-20T00:00:00
                                [ClickDate] => 2018-02-03T22:04:00
                                [CreativeInfo] => stdClass Object
                                    (
                                        [CreativeNumber] => 9
                                        [CreativeType] => Banner
                                    )
     
                                [NetPrice] => 49.45
                                [ProgramId] => 12436
                                [ProgramTitle] => Bitiba.fr
                                [PublisherCommission] => 1.98
                                [RateInfo] => stdClass Object
                                    (
                                        [IsTieredCommission] =>
                                        [RateDescription] => Vente
                                        [RateMode] => PayPerSale
                                        [RateNumber] => 1
                                        [RateValue] => 4
                                    )
     
                                [RegistrationDate] => 2018-02-03T22:06:18
                                [SubId] => helenehc
                                [TrackingMethod] => PostClick
                                [TransactionId] => 309446774
                                [TransactionStatus] => Confirmed
                            )
     
                    )
     
            )
     
    )
    Dans les deux cas, vous pouvez utiliser le code suivante pour boucler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $transactions = $response->TransactionCollection->Transaction;
    foreach ($transactions as $key => $ligneTransaction) {
    	echo $ligneTransaction->TransactionId, PHP_EOL;
    }
    Sauf erreur de ma part, cela devrait marcher.

    Bonne soirée.

  13. #13
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Il ya une solution simple si tu ne maîtrises pas la structure de tes données : tester si Transaction est un tableau ou non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach ($response->TransactionCollection as $transaction) {
    	if (is_array($transaction)) {
    		// c'est un tableau, on boucle dessus
    		foreach ($transaction as $transaction_element) {
    			echo $transaction_element->TransactionId, PHP_EOL;
    		}
    	} else {
    		echo $transaction->TransactionId, PHP_EOL;
    	}
    }
    Et pour répondre à ta question, ce n'est pas exactement cohérent, mais c'est un comportement que j'ai déjà vu (bienvenue dans le monde merveilleux des langages faiblement typés )
    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]

  14. #14
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    410
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 410
    Points : 90
    Points
    90
    Par défaut
    Merci Celira ton code fonctionne dans tous les cas Le comportement est en effet assez étrange, si on a 1 résultat ça retourne un objet stdclass et si plusieurs un tableau

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

Discussions similaires

  1. [AJAX] Lecture d'un objet JSON
    Par steackfrite dans le forum jQuery
    Réponses: 24
    Dernier message: 07/02/2014, 14h44
  2. Lecture d'un objet serial GPS
    Par juminet dans le forum Signal
    Réponses: 2
    Dernier message: 18/12/2007, 17h39
  3. Lecture d'un objet depuis un fichier bloquant
    Par dest dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 11/05/2007, 16h19
  4. Lecture / écriture d'objets sur le disque dur ?
    Par miria.vhg dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/02/2007, 15h21

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