首页 > 解决方案 > PHP - 分组排序数组

问题描述

我无法以不同的方式对数组结果进行排序。我编写了一个返回指定结果但方式不正确的 API 调用。

所以它给了我:

{
"success": true,
"data": [
    [
        "Question",
        [
            "Answer"
        ]
    ],
    [
        "Question",
        [
            "Answer 2"
        ]
    ],
    [
        "Question 2",
        [
            "Answer 3"
        ]
    ]
],
"message": null

}

我想为该问题返回一组答案,例如:

{
"success": true,
"data": [
    [
        "Question",
        [
            "Answer"
        ],
        [
            "Answer 2"
        ]
    ],
    [
        "Question 2",
        [
            "Answer 3"
        ]
    ]
],
"message": null
}

我的代码看起来像:

$questions = $this->getQRepository()->findAll();

$mappedQuestions = [];

foreach ($questions as $question){

    $title = $question->getTitle();

    $mappedQuestions[] = [
        $title,
        [
            $question->getAnswer()
        ]
    ];
}

return $mappedQuestions;

它给了我结果,它按 id 将每个问题与答案分组,但我需要按问题对所有答案分组。结果正确返回,但排序错误。

标签: phparrayssorting

解决方案


这可能有效,但我不确定这是否是您正在寻找的。所以首先,像这样修改你当前的循环和$mappedQuestions数组结构:

$mappedQuestions = [];

foreach ($questions as $question){

    $mappedQuestions[] = array(
                               'title' => $question->getTitle(), 
                               'answer' => $question->getAnswer()
                          );
}

之后,再次迭代数组以创建一个新数组,该数组将根据数组键将元素组合在一起,在本例中为“标题”。

$sorted = array();
foreach ($mappedQuestions as $element) {
    $sorted[$element['title']][] = $element['answer'];
}

return $sorted;

的最终输出$sorted是:

{
   "Question":[
      "Answer",
      "Answer 2"
   ],
   "Question 2":[
      "Answer 3"
   ]

排序循环代码实际上来自这个问题

我希望这会有所帮助。


推荐阅读