-2

Estou tentando percorrer as transaction da seguinte array mas sem sucesso:

Array
(
    [date] => 2021-08-07T20:48:14.000-03:00
    [transactions] => Array
        (
            [transaction] => Array
                (
                    [date] => 2021-08-07T19:14:44.000-03:00
                    [reference] => TPW-253961
                    [code] => 3ECE880C-AEFF-4A3E-44E5
                    [type] => 1
                    [status] => 4
                    [paymentMethod] => Array
                        (
                            [type] => 11
                        )

                    [grossAmount] => 3.00
                    [discountAmount] => 0.00
                    [feeAmount] => 0.06
                    [netAmount] => 2.94
                    [extraAmount] => 0.00
                    [lastEventDate] => 2021-08-07T19:15:59.000-03:00
                )
            [transaction] => Array
                (
                    [date] => 2021-08-07T19:15:44.000-03:00
                    [reference] => TPW-253961
                    [code] => 3ECE880C-AEFF-4A3E-99EA
                    [type] => 1
                    [status] => 4
                    [paymentMethod] => Array
                        (
                            [type] => 11
                        )

                    [grossAmount] => 3.00
                    [discountAmount] => 0.00
                    [feeAmount] => 0.06
                    [netAmount] => 2.94
                    [extraAmount] => 0.00
                    [lastEventDate] => 2021-08-07T19:15:59.000-03:00
                )

        )

    [resultsInThisPage] => 1
    [currentPage] => 1
    [totalPages] => 1
)

A array é recebida originalmente de um XML, por isso estou convertendo da seguinte maneira para o PHP:

$xml = simplexml_load_string($response, "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$array = json_decode($json,true);

E com o seguinte foreach estou tentando exibir os status e code de cada transaction:

foreach ($array["transactions"]["transaction"] as $resultado){
    echo $resultado["status"].' - '.$resultado["code"].'<br>';
}

O resultado do echo é algo completamente diferente do esperado, além de que não estar retornando o status e code de cada transaction, há 12 linhas de resultado (uma para cada item na array transaction:

inserir a descrição da imagem aqui

1 Resposta 1

0

Consegui resolver alterando o parâmetro false para true na conversão da array.

$array = json_decode($json,true);

Em vez de usar foreach, passei a utilizar o for da seguinte maneira:

for ($i = 0; $i < $array["resultsInThisPage"] OR $array["resultsInThisPage"] == 0 AND $i == 0; $i++){
    if ($array["resultsInThisPage"] < 2){
        $status = $array["transactions"]["transaction"]["status"];
        $code = $array["transactions"]["transaction"]["code"];
    } else {
        $status = $array["transactions"]["transaction"][$i]["status"];
        $code = $array["transactions"]["transaction"][$i]["code"];
    }
    echo $status.' - '.$code.'<br>';
}

Desta forma consegui obter os valores de $status e $code na array.

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .