Как сделать объединенный массив из массива .json в PHP? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь создать форму с кучей вопросов, которые можно добавить в RadioBox, CheckBox и т. Д. Я сделал файл .json, содержащий вопросы и возможные ответы, как это (это лишь небольшая часть файл):

{
"questions": {
    "0": {
            "question":"How many products?",
            "answers":["Less than 1000", "More than 1000", "More than 10000"],
            "score":[1, 2, 3],
            "info":"This is additional information for question 1"
        }
    ,
    "1":{
            "question":"How many websites?",
            "answers":["One", "Two", "Three"],
            "score":[1, 2, 3],
            "info":"This is additional information for question 2"
        }
}
}

Я использую класс, в котором у меня есть несколько функций для создания массивов, которые можно использовать на моей обычной странице .php. Я сделал массив вопросов, используя следующий кусок кода, который работает:

$questions = [];

foreach($json['questions'] as $key => $value){
        $this->questions[] = $value['question'];
}

Теперь я могу просто использовать вопрос [0], чтобы получить первый вопрос, а вопрос [1] - второй, что действительно приятно. Я пытаюсь создать массив, содержащий все ответы на вопрос, чтобы я мог сделать что-то похожее с ответами. В идеале это будет выглядеть примерно так:

array:
    arrayQuestion1Answers:
        string: answer1
        string: answer2
        string: answer3
    arrayQuestion2Answers:
        string: answer1
        string: answer2
        string: answer3

Таким образом, я мог бы сделать что-то вроде arrayQuestion1 [0], чтобы получить первый ответ на первый вопрос, и arrayQuestion2 [2], чтобы получить третий ответ на второй вопрос.

Спасибо, что прочитали мой длинный (и, возможно, глупый) вопрос, надеюсь, вы поможете!

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Попробуйте это,

$json = '{
    "questions": {
        "0": {
            "question":"How many products?","answers":["Less than 1000", "More than 1000", "More than 10000"],"score":[1, 2, 3],"info":"This is additional information for question 1"
        }
        ,"1":{
            "question":"How many websites?","answers":["One", "Two", "Three"],"score":[1, 2, 3],"info":"This is additional information for question 2"
        }
    }
}
';
$questions = json_decode($json,true);
$question = $questions['questions'];
foreach($question as $key => $que):
    $answer['arrayQuestion'.$key.'Answers'] = $que['answers'];
endforeach;
echo '<pre>';
print_r($answer);
0 голосов
/ 01 мая 2018

Вы говорите, что у вас уже есть функции для преобразования JSOn в PHP-массивы. Вы когда-нибудь проверяли json_decode () ? Это встроенная функция PHP для декодирования вашего JSON. При неудаче возвращает false

Более того: почему вы индексируете объекты в вашем questions объекте в вашем JSON? Вы можете также ввести:

{
    "questions": [
        {"somekey": "this_is_question_0"},
        {"somekey": "this_is_question_1"}
    ]
}

Таким образом, они автоматически индексируются.

Чтобы ответить на ваш настоящий вопрос, если вы используете то, что я описал выше, вы можете просто получить доступ к ответам на вопрос, например так:

$questions = json_decode($json);
$answers_to_question_1 = $questions[0]['answers'] ?? []; // ?? [] means: if not set, make it an empty array. This is the null coalesce feature, available in PHP 7.0 and higher. See http://php.net/manual/en/migration70.new-features.php.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...