php 按列对二维数组中的数据进行分组,并对其他列进行计数或求和

tf7tbtn2  于 2023-01-16  发布在  PHP
关注(0)|答案(1)|浏览(177)

我正在建立一个多维数组的数据有一个多个条目,但一些条目有相同的值;

id      name      delivery#  weight    time
--------------------------------------------
12      test      112233     45        now
13      test      112234     456       now
14      testA     112245     33        later
15      testB     334421     334       later
...
...

对于每个id,我像这样推到数组中

array_push($arraydata, array(
"id" => $id, 
"name" => $name,
"delivery" => $delivery,
"weight" => $weight,
"time" => $time
));

然后我用它循环

foreach($arraydata as $arraydataItem) {

//do stuff...
//test appears twice - echo count & delivery values
//testA once - echo count
//testB once - echo count

}

基本上,我想检查相同的名称值出现了多少次,并将权重值相加得出总数。
然后,对于具有相同“名称”的每个“交货”,将交货重量除以“名称”的总重量,得到百分比,我将用于计算“名称”总成本的百分比。

6ju8rftf

6ju8rftf1#

与使用array_push()创建 * that * 关联数组不同,您应该创建一个多维数组,如下所示:

$arraydata[$name][] = array('id' => $id, 'delivery' => $delivery, 'weight' => $weight, 'time' => $time);

根据你的问题
基本上,我想检查相同的名称值出现了多少次,并将权重值相加得出总数。
只需使用foreach循环遍历$arraydata数组,并显示每个名称关联的计数和总权重,如下所示:

foreach($arraydata as $key => $arraydataItem){
    // Display count and total weight associated for each name
    echo $key . ": (count: " . count($arraydataItem) . ", total weight: " . array_sum(array_column($arraydataItem,'weight')) . ")<br />";
}

这将输出:

test: (count: 2, total weight: 501)
testA: (count: 1, total weight: 33)
testB: (count: 1, total weight: 334)

此外,您可以调整此代码以满足进一步的需求。

    • 注意:**如果要查看$arraydata数组的结构,请执行var_dump($arraydata);

相关问题