如何为数组-php中的每个索引添加一个新项目?
Posted
技术标签:
【中文标题】如何为数组-php中的每个索引添加一个新项目?【英文标题】:How to add a new item to every index in the array -php? 【发布时间】:2022-01-20 08:49:35 【问题描述】:var_export($res)
是一个数组,如下所示。
array(0 =>(object) array('user' => NULL,
'courseId' => 18,),
1 =>(object) array('user' =>(object) array('id' => 1,
'name' => 'admin',
'files' => NULL,),
'courseId' => 1,),
)
在此数组中的每个索引处,我需要使用courseId
计算count
,并将一个名为count
的新项目添加到每个索引。我使用了下面的代码。并且预期的最终结果是一个对象数组,而不是对象的对象。
$res=json_decode($response);
foreach ($res as $key )
$count = MyCourse::where('course_id', $key->courseId)->distinct('student_id')->count();
$res['count'] = $count;
return response()->json(['data' => $res,'statusCode' => 200], 200);
上面的代码显示了下面的数据。它将count
添加为数组中的新索引,而不是将其作为新项添加到数组的每个索引中。此外,它以对象对象的形式返回结果。我该如何解决这个问题?
"0":
"user": null,
"courseId": 18
,
"1":
"user":
"id": 1,
"name": "admin",
"files": null
,
"courseId": 1
,
"count": 1
预期的最终结果:
[
"user": null,
"courseId": 18,
"count": 20
,
"user":
"id": 1,
"name": "admin",
"files": null
,
"courseId": 1,
"count": 10
]
【问题讨论】:
【参考方案1】:在您的 foreach 循环中,$key
是每个包含 courseId
的对象。
不要将count
添加到$res
,而是将其添加到$key
,如下所示:
foreach ($res as &$key )
$count = MyCourse::where('course_id', $key->courseId)->distinct('student_id')->count();
$key->count = $count; // set it to $key instead of $res
如果您希望结果是数组而不是对象,请将 true
作为第二个参数传递给 json_decode
,如下所示:
$res = json_decode($response, true); // associative array instead of object
然后编辑 foreach 以将其作为数组处理:
foreach ($res as $key )
$count = MyCourse::where('course_id', $key['courseId'])->distinct('student_id')->count();
$key['count'] = $count; // set it to $key instead of $res
【讨论】:
这样分配时有效 -$key->count = $count;
。但它只输出 1 个数组作为 "user": "id": 1, "name": "admin","files": null,"courseId": 1,"count": 1
确保你仍然在return response()->json(['data' => $res,'statusCode' => 200], 200);
中返回$res
【参考方案2】:
在您的情况下,您想为 $key
而不是 $res
设置计数字段
您的 foreach 循环应如下所示:
foreach ($res as $key )
$count = MyCourse::where('course_id', $key->courseId)->distinct('student_id')->count();
$key->count = $count;
这将输出:
"0":
"user": null,
"courseId": 18,
"count": 20
,
"1":
"user":
"id": 1,
"name": "admin",
"files": null
,
"courseId": 1,
"count": 10
【讨论】:
这给了我错误Cannot use object of type stdClass as array
在线$key['count'] = $count;
糟糕,抱歉,我会编辑我的答案。您需要使用 -> 将计数称为对象字段
只有foreach ($res as &$key)
才能正常工作以上是关于如何为数组-php中的每个索引添加一个新项目?的主要内容,如果未能解决你的问题,请参考以下文章