【问题标题】:php stdClass object Nested object for child valuesphp stdClass object 子值的嵌套对象
【发布时间】:2019-06-22 21:15:55
【问题描述】:

我正在 laravel 中处理 stdClass 对象。我必须合并两个表中的值。即第一个包含一些问题,另一个包含他们的多项选择答案。如何以问题对象可以包含其答案对象作为嵌套对象的方式组合结果。我想要这样的结构:

stdClass Object
(
[question_id] => 4
[title] => How to add data?
[options] => Array
(
[0] => stdClass Object
(
[id] => 1
[question_id] => 4
[option_title] => By any device
)

[1] => stdClass Object
(
[id] => 2
[question_id] => 4
[option_title] => By mobile
)

[2] => stdClass Object
(
[id] => 3
[question_id] => 4
[option_title] => By Laptop
)
)
stdClass Object
(
[question_id] => 5
[title] => Where to add data?
[options] => Array
(
[0] => stdClass Object
(
[id] => 1
[question_id] => 5
[option_title] => Lahore
)

[1] => stdClass Object
(
[id] => 2
[question_id] => 5
[option_title] => Karachi
)

[2] => stdClass Object
(
[id] => 3
[question_id] => 5
[option_title] => Multan
)

);

【问题讨论】:

  • 再次,您必须与我们分享您自己的尝试。发布这样的问题不会帮助您解决问题。但是,仅通过阅读您的问题陈述,我认为您应该使用连接来连接您的两个表,然后在 question_id 上使用 group by 来对结果进行分组。
  • 我做了以下但得到错误的结果,因为问题不再是对象:$result = [];foreach($question_data as $q) { $result[$q['title']][ ] = [ 'id' => $q['id'], 'question_id' => $q['question_id'], 'option_q_id' => $q['option_q_id'], 'option_title' => $q[ 'option_title'] ]; }

标签: php laravel object stdclass


【解决方案1】:

使用带键的 foreach 有点前卫。最后开发了以下代码,效果很好:

foreach ($question_data as $key => $question) {
            foreach ($option_data as $key2 => $opt) {
                if ($question_data[$key]->question_id == $option_data[$key2]['question_id'] && $question->q_type != 3) {
                    $question->options[] = [
                        'question_id' => $option_data[$key2]['question_id'],
                        'option_id' => $option_data[$key2]['id'],
                        'option_title' => $option_data[$key2]['option_title']
                    ];
                } else if($question->q_type == 3) {
                    $question->options = [];
                }
            }
        }

它提供了以下结果:

"question_data": [
        {
            "question_id": 2,
            "title": "Describe about visit",
            "q_type": 3,
            "question_group_id": 1,
            "options": []
        },
        {
            "question_id": 3,
            "title": "How to upload data",
            "q_type": 2,
            "question_group_id": 1,
            "options": [
                {
                    "question_id": 3,
                    "option_id": 4,
                    "option_title": "By any device"
                },
                {
                    "question_id": 3,
                    "option_id": 5,
                    "option_title": "By mobile"
                },
                {
                    "question_id": 3,
                    "option_id": 6,
                    "option_title": "By camera"
                },
                {
                    "question_id": 3,
                    "option_id": 7,
                    "option_title": "By Laptop"
                },
                {
                    "question_id": 3,
                    "option_id": 8,
                    "option_title": "No answer"
                }
            ]
        },
        {
            "question_id": 4,
            "title": "How to add question?",
            "q_type": 3,
            "question_group_id": 1,
            "options": []
        },
        {
            "question_id": 5,
            "title": "Multi selection is working?",
            "q_type": 1,
            "question_group_id": 1,
            "options": [
                {
                    "question_id": 5,
                    "option_id": 9,
                    "option_title": "Yes"
                },
                {
                    "question_id": 5,
                    "option_id": 10,
                    "option_title": "No"
                },
                {
                    "question_id": 5,
                    "option_id": 11,
                    "option_title": "Not Confirmed"
                },
                {
                    "question_id": 5,
                    "option_id": 12,
                    "option_title": "In progress"
                },
                {
                    "question_id": 5,
                    "option_id": 13,
                    "option_title": "Testing"
                }
            ]
        }
    ]

【讨论】:

    猜你喜欢
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多