Récupération de données

a marqué ce sujet comme résolu.

Bonsoir,

J'ai un fichier json comme ceci :

 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
{
    "1": {
        "question": "Do you like the following series?",
        "answers": {
            "1": {
                "subquestion": "Grey's Anatomy",
                "choices": {
                    "1": "Yes",
                    "2": "No"
                }
            },
            "2": {
                "subquestion": "Desperate Housewives",
                "choices": {
                    "choice1": "Yes",
                    "choice2": "No"
                }
            }
        }
    },
    "2": {
        "question": "De quel sexe êtes-vous ?",
        "answers": {
            "1": {
                "choices": {
                    "choice1": "Male",
                    "choice2": "Female"
                }
            }
        }
    }
}

Je voudrais récupérer chaques données en php, j'ai donc procédé comme ceci:

 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
<?php
$filename = 'quizz.json';

if (file_exists($filename)) {
    $json= file_get_contents($filename);
    $quizz = json_decode($json,true);
}

$nb_test = 1;

while (isset($quizz['"' + $nb_test + '"'])) 
{
    $question = $quizz['"' + $nb_test + '"']['question'];

    echo $question . '<br />';

    $nb_anwser = 1;

    while (isset($quizz['"' + $nb_test + '"']['answers']['"' + $nb_anwser + '"']))
    {
        $answer = $quizz['"' + $nb_test + '"']['answers']['"' + $nb_anwser + '"'];

        if(isset($answer['subquestion']))
        {
            echo '-> ' . $answer['subquestion'] . '<br />';
        }

        $nb_choice = 1;

        while (isset($answer['choices']['"' + $nb_choice + '"']))
        {
            $choice = $answer['choices']['"' + $nb_choice + '"'];
            echo $nb_choice. ' : ' . $choice . '<br />';

            $nb_choice++;
        }

        $nb_anwser++;
    }

    $nb_test++;
}
?>

Mais j'ai un problème, cela m'affiche cela :

1
2
3
4
5
6
Do you like the following series?
-> Grey's Anatomy
1 : Yes
2 : No
-> Desperate Housewives
De quel sexe êtes-vous ?

Alors que je veux :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Do you like the following series?
-> Grey's Anatomy
1 : Yes
2 : No
-> Desperate Housewives
1 : Yes
2 : No
De quel sexe êtes-vous ?
1 : Male
2 : Female

Une idée comment procéder ? En complément, est-ce que mon architecture json est-elle propre ?

Merci :)

+0 -0

C'est possible de le faire en PHP sans modifier l'architecture de ton JSON actuel.

 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
<?php
header('Content-Type: text/html; charset=utf-8');

$filename = 'quizz.json';

if (file_exists($filename)) {
    $json  = file_get_contents($filename);
    $quizz = json_decode($json,true);
}

echo '<ul>';
foreach ($quizz as $value) {
    echo '<li>';
    // Question
    echo $value['question'];

    echo '<ul>';
    // Réponse
    foreach ($value['answers'] as $answer) {
        if (isset($answer['subquestion'])) {
            // Sous question
            echo '<li>';
            echo $answer['subquestion'];
            echo '<ul>';
            echo '</li>';
        }

        // Choix de la réponse
        for ($i = 1; $i <= count($answer['choices']); $i++) {
            echo '<li>';
            if (isset($answer['choices']['choice1'])) {
                echo $answer['choices']['choice' . $i];
            } else {
                echo $answer['choices'][$i];
            }
            echo '</li>';

        }
        echo '</ul>';
    }
    echo '</ul>';
    echo '</li>';
}
echo '</ul>';
?>

Mais pour être franc, l'architecture de ton fichier JSON n'est pas terrible. Il est possible de mettre en place dans du JSON un tableau.

+0 -0

Merci de ta réponse :) ,

 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
{ 
    "quizz": [
        {
            "question": "Do you like the following series?",
            "answers": [
                {
                    "subquestion": "Grey's Anatomy",
                    "choices": [
                        {
                            "choice": "Yes"
                        }, 
                        {
                            "choice": "No"
                        }
                    ] 
                },
                {
                    "subquestion": "Desperate Housewives",
                    "choices": [
                        {
                            "choice": "Yes"
                        }, 
                        {
                            "choice": "No"
                        }
                    ] 
                }
            ] 
        },
        {
            "question": "De quel sexe êtes-vous ?",
            "answers": [
                {
                    "choices": [
                        {
                            "choice": "Male"
                        }, 
                        {
                            "choice": "Female"
                        }
                    ] 
                }
            ]
        }
    ] 
} 
 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
<?php
$filename2 = 'quizz2.json';

if (file_exists($filename2)) {
    $json2  = file_get_contents($filename2);
    $quizz2 = json_decode($json2,true);

    echo '<ul>';
    foreach ($quizz2['quizz'] as $value) {
        echo '<li>';
        // Question
        echo $value['question'];

        echo '<ul>';
        // Réponse
        foreach ($value['answers'] as $answer) {
             if (isset($answer['subquestion'])) {
                // Sous question
                echo '<li>';
                echo $answer['subquestion'];
                echo '</li>';
            }

            echo '<ul>';
            // Choix
            foreach ($answer['choices'] as $choice) {
                echo '<li>';
                echo $choice['choice'];
                echo '</li>';
            }
            echo '</ul>';
        }

        echo '</ul>';
        echo '</li>';
    }
    echo '</ul>';
}

?>
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte