首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将调查问卷转换为对象

将调查问卷转换为对象
EN

Stack Overflow用户
提问于 2020-07-22 02:51:27
回答 1查看 41关注 0票数 0

希望你能帮助我,我之前确实想出了一些递归,但这不是一天。作为问卷调查的结果,我有这样的数组:

代码语言:javascript
复制
Array
(
    [Q1] => Array
        (
            [A3] => Array
                (
                    [Q11] => Array
                        (
                            [A11] => Array
                                (
                                    [Q111] => A112
                                )
                        )
                    [Q12] => Array
                        (
                            [A23] => Stackoverflow
                        )
                )
        )
    [Q2] => A5
)

这些是问题和答案(我不能依赖它们的索引或前缀,但它们总是成对出现),如果答案是数组,则它有子问题。Q1将A3作为答案,并将A11作为Q11的嵌套答案,最后将A112作为该分支中Q111的最终答案。但Q1也有一个平行的子问题,A23被选中,因为它是“其他:”选项,用户输入文本。最后,第二个问题选择了A5 answers。

为了更快地进入,下面是JSON中的数组:

代码语言:javascript
复制
    {"Q1":{"A3":{"Q11":{"A11":{"Q111":"A112"}},"Q12":{"A23":"Stackoverflow"}}},"Q2":"A5"}

所以现在,我需要在这样的对象中获得结果:

代码语言:javascript
复制
{
    "questions": [{
            "questionId": "Q1",
            "answers": [{
                "answerId": "A3",
                "questions": [{
                        "questionId": "Q11",
                        "answers": [{
                            "answerId": "A11",
                            "questions": [{
                                "questionId": "Q111",
                                "answers": [{
                                    "answerId": "A112"
                                }]
                            }]
                        }]
                    },
                    {
                        "questionId": "Q12",
                        "answers": [{
                            "answerId": "A23",
                            "answerPhrase": "Stackoverflow"
                        }]
                    }
                ]
            }]
        },
        {
            "questionId": "Q2",
            "answers": [{
                "answerId": "A5"
            }]
        }
    ]
}

我确信这对于递归来说是相对简单的,但是在尝试和迷失之后,我尝试了JSON,结果更糟。我提醒你,Q和A是成对出现的,所以我相信递归应该有两个嵌套循环,但你可能知道得更清楚-我只是不能依赖索引值。提前感谢,PHP精灵们!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 20:01:42

请检查这是否满足了您的需求。它是使用递归函数完成的。与我的结果和您正在寻找的结果唯一不同的是,Q1和Q2位于同一级别,而不是answers下的另一个对象。根据你剩下的问题,我假设这是一个打字错误,我所做的将是正确的。

代码语言:javascript
复制
$response = json_decode('{"Q1":{"A3":{"Q11":{"A11":{"Q111":"A112"}},"Q12":{"A23":"Stackoverflow"}}},"Q2":"A5"}', true);

function processQuestions($questions)
{
  $ret = array();
  if(!empty($questions))
  {
    foreach($questions as $question => $answer)
    {
      $ret[] = array(
          'questionId' => $question,
          'answers' => processAnswers($answer),
      );
    }
  }
  return $ret;
}

function processAnswers($answers)
{
  if(!is_array($answers))
  {
    return array(array('answerId'=>$answers));
  }

  $ret = array();
  if(!empty($answers))
  {
    foreach($answers as $answerId=>$answer)
    {
      $ans = array('answerId'=>$answerId);
      if(is_array($answer))
      {
        $ans['questions'] = processQuestions($answer);
      }
      else
      {
        $ans['answerPhrase'] = $answer;
      }
      $ret[] = $ans;
    }
  }
  return $ret;
}

$result = array('questions'=>processQuestions($response));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63021216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档