gpt4 book ai didi

php - 按属性对数组对象进行分组

转载 作者:行者123 更新时间:2023-12-03 01:04:57 27 4
gpt4 key购买 nike

如何按“tax”和“concept”以及 SUM 属性“val”对数组进行分组?

我希望在税收和概念相同时创建单个对象,并对值进行求和。

我尝试在内部使用简单的 foreach 和验证,但不起作用。

谢谢。

echo json_encode($array);

阵列打印

[
{
"tax": "10",
"concept": "TUC",
"val": "10"
},
{
"tax": "10",
"concept": "TUC",
"val": "86"
},
{
"tax": "15",
"concept": "TUC",
"val": "8"
},
{
"tax": "11",
"concept": "IPS",
"val": "6"
},
{
"tax": "11",
"concept": "IPS",
"val": "45"
}
]

预期结果

[
{
"tax": "10",
"concept": "TUC",
"val": "96"
},
{
"tax": "15",
"concept": "TUC",
"val": "8"
},
{
"tax": "11",
"concept": "IPS",
"val": "51"
}
]

最佳答案

您可以使用 array_reduce() 这里。您将使用tax value 作为您要分组的键,并将数组减少到唯一的 tax元素,同时生成 val 的总和值(value)观。这种方法唯一需要注意的是,将其转换为 JSON 将使 PHP 认为外部元素是一个对象而不是数组(即使它是一个数组,这是因为我们最终使用非默认数组索引)。但是,通过调用 array_values() 可以轻松缓解这个问题。 。

$array = // your array from above
$result = array_reduce($array, function($carry, $item) {
if(!isset($carry[$item->tax])) {
$carry[$item->tax] = $item;
} else {
$carry[$item->tax]->val += $item->val;
}
return $carry;
});

$result = array_values($result);

echo json_encode($result);

可以从this demo看到它产生:

[{
"tax": "10",
"concept": "TUC",
"val": 96
}, {
"tax": "15",
"concept": "TUC",
"val": "8"
}, {
"tax": "11",
"concept": "IPS",
"val": 51
}]

关于php - 按属性对数组对象进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38880492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com