Mam ciąg JSON w PHP:

$casedata = "{\"id\":4823,\"status\":2,\"steps\":12,\"error\":\"catched error playing testcase\",\"result\":\"\",\"sublog\":[{\"step\":8,\"message\":\"corpus.invalidState.2.getBlockedRegionsForUnit\"},{\"step\":10,\"message\":\"corpus.invalidState.2.getBlockedRegionsForUnit\"}]}";

Próbuję to przewidzieć

$array = json_decode($casedata,true);

Nie, przejdź przez klucze z:

foreach($array as $key => $value){
        if(is_array($value)){
            echo "Array";
        }else{
            echo "Content: ".$key." / ".$value." <br/>";
        }
}

Wynik jest

Content: id / 4823
Content: status / 2
Content: steps / 12
Content: error / catched error playing testcase 
Content: result /
Array

Działa w porządku. Ale jak uzyskać $ Key i $ Wartość z tablicy SUBRAY "SUBLOG"? Próbowałem jako próbkę z:

foreach($array as $key => $value){
        if(is_array($value)){
            echo "Array";
            foreach($value as $sub => $value2){
                echo "Sub: ".$sub." / ".$value2." <br/>";
            }
        }else{
            echo "Content: ".$key." / ".$value." <br/>";
        }
}

Ale to nie działa. Co tutaj tęsknię?

1
Ingo 23 luty 2019, 21:42

2 odpowiedzi

Najlepsza odpowiedź

Sublog to tablica tablic. Możesz utworzyć Rekueria Funkcja, która wydrukuje wszystkie wartości:

$array = json_decode($casedata,true);

printKeyValues($array);

function printKeyValues($input) {
    foreach ($input as $key => $value) {
        if (is_array($value)) {
            printKeyValues($value);
        } else {
            echo "Content: ".$key." / ".$value. <br/>;
        }
    }
}
0
Andrii Filenko 23 luty 2019, 18:51

Wewnętrzna tablica jest tablicą 1D, a nie asocjacyjną tablicą.

Spróbuj użyć

foreach($array as $key => $value){
        if(is_array($value)){
            echo "Array";
            $count = count($value);
            for($i=0;i<$count;i++) {
                echo $value[i]['step']; // <---
             }
        }
    }else{
        echo "Content: ".$key." / ".$value." <br/>";
    }
}
0
mrid 23 luty 2019, 19:03