【问题标题】:How to make a combined array of .json array's in PHP?如何在 PHP 中制作 .json 数组的组合数组?
【发布时间】:2018-05-01 14:14:55
【问题描述】:

我正在尝试制作一个包含一堆问题的表单,这些问题可以添加到 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'];
}

现在我可以使用 question[0] 来获取第一个问题并使用 question[1] 来获取第二个问题,这非常好。我要做的是创建一个数组,其中包含每个问题的所有答案,这样我就可以对答案做类似的事情。理想情况下,它看起来像这样:

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

这样我就可以像 arrayQuestion1[0] 那样从第一个问题中得到第一个答案,而 arrayQuestion2[2] 从第二个问题中得到第三个答案。

感谢您阅读我冗长(而且可能很愚蠢)的问题,希望您能提供帮助!

【问题讨论】:

  • 只使用 json 解码数组有什么问题? “第一个问题的第一个答案”将是 $json['questions'][0]['answers'][0]
  • 确实如此,但我想知道是否可以制作一个数组。

标签: php arrays json for-loop foreach


【解决方案1】:

试试这个,

$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);

【讨论】:

    【解决方案2】:

    您说您已经拥有将 JSOn 转换为 PHP 数组的函数。你有没有检查过json_decode()?这是一个用于解码 JSON 的原生 PHP 函数。失败时返回 false。

    此外:为什么要在 JSON 中索引 questions 对象中的对象?您不妨输入:

    {
        "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.
    

    【讨论】:

    • 如果你的 json 是有效的,那将是一个很好的例子。
    • 好的,先生。 wiseguy,我知道我不能在我的 JSON 中输入 cmets,否则我会输入“无效的 JSON,这只是一个例子”,但我会更新答案,因为你在技术上是正确的。感谢您为那些可能无法识别无效 JSON 的人指出这一点。
    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2022-06-24
    • 2017-02-24
    • 2021-12-26
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多