Laravel/PHP操作集合记录

Laravel/PHP操作集合记录,php,object,laravel-4,Php,Object,Laravel 4,我想操纵一个有说服力的物体。为了便于阅读,下面是Json中对象的结构。每条记录都是一个问题的答案。您会注意到记录中有两个实例(1和2) 目标如下: 1) 将所有相关的“应答”字段放在一个记录中(按“实例”分组——它定义了关系——如下所述) 2) 按实例对记录进行分组。我需要将带有“实例”:“1”的所有记录分组在一起,并将带有“实例”:“2”的所有记录分组在一起 3) 维护要传递给视图的集合中的项 所需的格式:(注意记录是如何按“实例”分组的,我现在可以循环它们,这是我在这里的目标) 原始输出:

我想操纵一个有说服力的物体。为了便于阅读,下面是Json中对象的结构。每条记录都是一个问题的答案。您会注意到记录中有两个实例(1和2)

目标如下:

1) 将所有相关的“应答”字段放在一个记录中(按“实例”分组——它定义了关系——如下所述)

2) 按实例对记录进行分组。我需要将带有“实例”:“1”的所有记录分组在一起,并将带有“实例”:“2”的所有记录分组在一起

3) 维护要传递给视图的集合中的项

所需的格式:(注意记录是如何按“实例”分组的,我现在可以循环它们,这是我在这里的目标)

原始输出:

[
[
    {
        "id": 1241,
        "project_id": 1080,
        "user_id": 1,
        "question_id": 46,
        "answer": "John",
        "instance": "1"
    },
    {
        "id": 1271,
        "project_id": 1080,
        "user_id": 1,
        "question_id": 46,
        "answer": "Jake",
        "instance": "2"
    }
],
[
    {
        "id": 1242,
        "project_id": 1080,
        "user_id": 1,
        "question_id": 47,
        "answer": "A",
        "instance": "1"
    },
    {
        "id": 1272,
        "project_id": 1080,
        "user_id": 1,
        "question_id": 47,
        "answer": "B",
        "instance": "2"
    }
],

[
    {
        "id": 1240,
        "project_id": 1080,
        "user_id": 1,
        "question_id": 48,
        "answer": "Livingston",
        "instance": "1"
    },
    {
        "id": 1279,
        "project_id": 1080,
        "user_id": 1,
        "question_id": 48,
        "answer": "Miller",
        "instance": "2"
    }
],

]
下面的一些代码使我接近了期望的结果,但如果每个实例中的答案数不完全匹配,则抛出了一个偏移错误:

        // the $answers object is the one I'm trying to manipulate. 
        // for context, $answers->toJson() gives the raw json output above
            foreach($answers as $answer)
            {
                $numOfAnswers = $answer->count();
            }


            $i = 0;
            while ($i < $numOfAnswers) {
                $resource{$i} = $answers->fetch($i);  
                $i++;
            }   

            // This returns 'John' on the first loop, 'Jake' on the second loop, etc.
            foreach($resource as $answerGroup)
            {
                 $answerGroup->fetch('answer')[1]
            }
//$answers对象就是我试图操纵的对象。
//对于上下文,$answers->toJson()提供上面的原始json输出
foreach($answers作为$answer)
{
$numOfAnswers=$answer->count();
}
$i=0;
而($i<$numOfAnswers){
$resource{$i}=$answers->fetch($i);
$i++;
}   
//第一个循环返回“John”,第二个循环返回“Jake”,以此类推。
foreach($answerGroup形式的资源)
{
$answerGroup->fetch('answer')[1]
}

在一个数组中组合键和数字索引不是一种好的样式。。。不管怎样,我用多维数组操作,我得到的是:

  $answers = [];
  foreach ($initialCollection as $item) {
        foreach ($item as $answer) {
            $instance = $answer['instance'];
            if (!isset($answers[$instance])) {
                $answers[$instance] = [
                    'instance'  => $instance,
                    'answers'   => [$answer['answer']],
                ];
            } else {
                $answers[$instance]['answers'][] = $answer['answer'];
            }
        }
    }

试试这个并检查结果。您可能希望从中获得新的收藏。

是的,先生,我们将立即着手。。。你试过的密码在哪里?SamV,谢谢。我添加了一些我在上面尝试过的代码。你打算如何在一个对象中获得3个相同的属性
答案
?Cheelahim,这是一个输入错误。它是固定的。最初,我得到了一个错误异常:“间接修改Lightlight\Database\Eloquent\Collection的重载元素无效”这行:$answers[$instance]['answers'][=$answer['answer'];仍在努力。
$answers
应该是一个简单的阵列。非常感谢。
  $answers = [];
  foreach ($initialCollection as $item) {
        foreach ($item as $answer) {
            $instance = $answer['instance'];
            if (!isset($answers[$instance])) {
                $answers[$instance] = [
                    'instance'  => $instance,
                    'answers'   => [$answer['answer']],
                ];
            } else {
                $answers[$instance]['answers'][] = $answer['answer'];
            }
        }
    }