php - 如何在php中动态创建一个计数对象?
问题描述
我有这样的数据,
data: [{
0: {
id: 1
name: aaa,
}
1: {
id: 2
name: bbb,
}
3: {
id: 3
name: ccc,
}
4: {
id: 2
name: bbb,
}
5: {
id: 1
name: aaa,
}
6: {
id: 2
name: bbb,
}
}]
现在我想得到重复值的计数,我希望我的最终结果是这样的,
data: [{
0: {
id: 1
name: aaa,
count: 2
}
1: {
id: 2
name: bbb,
count: 3
}
2: {
id: 3
name: ccc,
count: 1
}
}]
我试过这段代码,
$loc = []
foreach ($data as $key) {
if(array_key_exists($key->id,$loc)){
$loc[$key->id] = $loc[$key->id] + 1;
}else{
$loc[$key->id] = 1;
}
}
它有效,但结果类似于,
{
1: 2
2: 3
3: 1
}
但我想像上面提到的那样显示。帮助我正确获取数据格式。
解决方案
此代码将为您提供所需的基本结构:
$loc = [];
foreach ($data as $key) {
if(array_key_exists($key->id,$loc)){
$loc[$key->id]->count++;
}else{
$loc[$key->id] = clone $key;
$loc[$key->id]->count = 1;
}
}
print_r($loc);
输出:
Array
(
[1] => stdClass Object
(
[id] => 1
[name] => aaa
[count] => 2
)
[2] => stdClass Object
(
[id] => 2
[name] => bbb
[count] => 3
)
[3] => stdClass Object
(
[id] => 3
[name] => ccc
[count] => 1
)
)
然后,您可以进行各种操作以获取类似于您在问题中显示的 JSON 的内容,例如
echo json_encode((object)['data' => [(object)array_values($loc)]], JSON_PRETTY_PRINT);
输出:
{
"data": [
{
"0": {
"id": 1,
"name": "aaa",
"count": 2
},
"1": {
"id": 2,
"name": "bbb",
"count": 3
},
"2": {
"id": 3,
"name": "ccc",
"count": 1
}
}
]
}
推荐阅读
- swift - Swift - 相互重叠的垂直堆栈元素
- android - 是否可以从 JNI 函数调用另一个文件中定义的类?
- excel - 运行时错误“-2147024809(80070057)”指定的值超出范围
- rest - 如何将 PubSub Rest API 与 Google 服务帐户一起使用?
- javascript - 我通过 Parent.But this.prop 将 msg 从 Child1 传递给 Child2
- c# - 如何缓存程序集以供以后编译?[罗斯林]
- python - Pyinstaller - 将 excel 文件捆绑到 onefile exe
- javascript - 损坏的图像图标和类型错误:comments.map 不是函数
- python-3.x - 图像上对象之间的距离
- javascript - 编辑器之前需要的制表符表上下文单击事件