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