PHP分组多维数组独立处理每组数组

问题描述

我正在开发一种独特的基于群组的购物车系统,其工作方式与传统的购物车系统不同。对于购物车,我得到包含 group_id 的行。我想按 group_id 对所有订单进行分组并处理其数据以计算动态定价、商品总数、折扣等。

我想显示的数据供管理员使用 datatables 使用。所以我 无法使用 group_id 过滤器运行查询。我必须显示所有 为管理员分组数据。

查询结果如下。

查询结果

Array
(
    [0] => stdClass Object
        (
            [id] => 14
            [order_number] => 2020111629863
            [group_order_number] => 1605497369298
            [product] => 297
            [product_option] => 0
            [qty] => 3
            [group_id] => 298
            [group_admin] => 72
            [group_user] => 63
            [customers] => [{"name":"Roma Patel","email":"roma@pad.com","qty":"1"},{"name":"Manoj Bajpai","email":"manoj@skdf.com","qty":"2"}]
            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
            [added_at] => 2020-12-26 10:39:13
        )

    [1] => stdClass Object
        (
            [id] => 15
            [order_number] => 2020111618475
            [group_order_number] => 1605498753184
            [product] => 174
            [product_option] => 0
            [qty] => 1
            [group_id] => 184
            [group_admin] => 71
            [group_user] => 75
            [customers] => [{"name":"loveena","email":"love@sdklf.com","qty":1}]
            [identifier] => FqPeYG6L2FVMQFGM_990314138546b9b5ce73df287919ca0a
            [added_at] => 2020-11-16 07:52:33
        )

    [2] => stdClass Object
        (
            [id] => 16
            [order_number] => 2020111629863
            [group_order_number] => 1605497369298
            [product] => 168
            [product_option] => 0
            [qty] => 1
            [group_id] => 298
            [group_admin] => 72
            [group_user] => 63
            [customers] => [{"name":"Roma Patel","qty":1}]
            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
            [added_at] => 2020-12-15 12:18:23
        )

    [3] => stdClass Object
        (
            [id] => 17
            [order_number] => 2020111629863
            [group_order_number] => 1605497369298
            [product] => 64
            [product_option] => 0
            [qty] => 2
            [group_id] => 298
            [group_admin] => 72
            [group_user] => 63
            [customers] => [{"name":"Rinku Patani","email":"rinku@patani.com","qty":"2"}]
            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
            [added_at] => 2020-12-22 12:27:46
        )

    [4] => stdClass Object
        (
            [id] => 18
            [order_number] => 2020111629873
            [group_order_number] => 1605497369298
            [product] => 64
            [product_option] => 0
            [qty] => 1
            [group_id] => 298
            [group_admin] => 72
            [group_user] => 73
            [customers] => [{"name":"Vijay Sonar","email":"vson@aksd.com","qty":"1"}]
            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
            [added_at] => 2020-12-24 10:51:00
        )

    [5] => stdClass Object
        (
            [id] => 19
            [order_number] => 2020111618475
            [group_order_number] => 1605498753184
            [product] => 102
            [product_option] => 0
            [qty] => 1
            [group_id] => 184
            [group_admin] => 71
            [group_user] => 75
            [customers] => [{"name":"Rima Lagu","email":"rima@lagosd.com","qty":1}]
            [identifier] => FqPeYG6L2FVMQFGM_990314138546b9b5ce73df287919ca0a
            [added_at] => 2020-12-24 13:01:14
        )

    [6] => stdClass Object
        (
            [id] => 20
            [order_number] => 2020111629873
            [group_order_number] => 1605497369298
            [product] => 146
            [product_option] => 0
            [qty] => 2
            [group_id] => 298
            [group_admin] => 72
            [group_user] => 73
            [customers] => [{"name":"Ramesh Oza","email":"ramesh@amdf.com","qty":"2"}]
            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
            [added_at] => 2020-12-26 10:01:44
        )

    [7] => stdClass Object
        (
            [id] => 21
            [order_number] => 2020111629873
            [group_order_number] => 1605497369298
            [product] => 297
            [product_option] => 1
            [qty] => 3
            [group_id] => 298
            [group_admin] => 72
            [group_user] => 73
            [customers] => [{"name":"Aniketh Vora","email":"aniket@sdfk.com","qty":"3"}]
            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
            [added_at] => 2020-12-26 10:31:55
        )

    [8] => stdClass Object
        (
            [id] => 23
            [order_number] => 2020111629863
            [group_order_number] => 1605497369298
            [product] => 146
            [product_option] => 0
            [qty] => 3
            [group_id] => 298
            [group_admin] => 72
            [group_user] => 63
            [customers] => [{"name":"Roma Patel","qty":1},{"name":"vijay sonar","email":"vso@lkd.com","qty":2}]
            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
            [added_at] => 2020-12-26 10:48:33
        )

    [9] => stdClass Object
        (
            [id] => 24
            [order_number] => 2020111629863
            [group_order_number] => 1605497369298
            [product] => 297
            [product_option] => 1
            [qty] => 2
            [group_id] => 298
            [group_admin] => 72
            [group_user] => 63
            [customers] => [{"name": "Harprit Sing","email": "harpr@sfk.co","qty": 1},{"name": "Roma Patel","email": "roma@pad.com","qty": 1}]
            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
            [added_at] => 2020-12-26 10:56:34
        )

)

我根据 group_id 对所有项目进行了分组,如下所示。

按组 ID 分组的项目

Array
(
    [products] => Array
        (
            [298] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 14
                            [order_number] => 2020111629863
                            [group_order_number] => 1605497369298
                            [product] => 297
                            [product_option] => 0
                            [qty] => 3
                            [group_id] => 298
                            [group_admin] => 72
                            [group_user] => 63
                            [customers] => [{"name":"Roma Patel","qty":"2"}]
                            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
                            [added_at] => 2020-12-26 10:39:13
                        )

                    [1] => stdClass Object
                        (
                            [id] => 16
                            [order_number] => 2020111629863
                            [group_order_number] => 1605497369298
                            [product] => 168
                            [product_option] => 0
                            [qty] => 1
                            [group_id] => 298
                            [group_admin] => 72
                            [group_user] => 63
                            [customers] => [{"name":"Roma Patel","qty":1}]
                            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
                            [added_at] => 2020-12-15 12:18:23
                        )

                    [2] => stdClass Object
                        (
                            [id] => 17
                            [order_number] => 2020111629863
                            [group_order_number] => 1605497369298
                            [product] => 64
                            [product_option] => 0
                            [qty] => 2
                            [group_id] => 298
                            [group_admin] => 72
                            [group_user] => 63
                            [customers] => [{"name":"Rinku Patani","qty":"2"}]
                            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
                            [added_at] => 2020-12-22 12:27:46
                        )

                    [3] => stdClass Object
                        (
                            [id] => 18
                            [order_number] => 2020111629873
                            [group_order_number] => 1605497369298
                            [product] => 64
                            [product_option] => 0
                            [qty] => 1
                            [group_id] => 298
                            [group_admin] => 72
                            [group_user] => 73
                            [customers] => [{"name":"Vijay Sonar","qty":"1"}]
                            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
                            [added_at] => 2020-12-24 10:51:00
                        )

                    [4] => stdClass Object
                        (
                            [id] => 20
                            [order_number] => 2020111629873
                            [group_order_number] => 1605497369298
                            [product] => 146
                            [product_option] => 0
                            [qty] => 2
                            [group_id] => 298
                            [group_admin] => 72
                            [group_user] => 73
                            [customers] => [{"name":"Ramesh Oza","qty":"2"}]
                            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
                            [added_at] => 2020-12-26 10:01:44
                        )

                    [5] => stdClass Object
                        (
                            [id] => 21
                            [order_number] => 2020111629873
                            [group_order_number] => 1605497369298
                            [product] => 297
                            [product_option] => 1
                            [qty] => 3
                            [group_id] => 298
                            [group_admin] => 72
                            [group_user] => 73
                            [customers] => [{"name":"Aniketh Vora","qty":"3"}]
                            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
                            [added_at] => 2020-12-26 10:31:55
                        )

                    [6] => stdClass Object
                        (
                            [id] => 23
                            [order_number] => 2020111629863
                            [group_order_number] => 1605497369298
                            [product] => 146
                            [product_option] => 0
                            [qty] => 3
                            [group_id] => 298
                            [group_admin] => 72
                            [group_user] => 63
                            [customers] => [{"name":"Roma Patel","qty":2}]
                            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
                            [added_at] => 2020-12-26 10:48:33
                        )

                    [7] => stdClass Object
                        (
                            [id] => 24
                            [order_number] => 2020111629863
                            [group_order_number] => 1605497369298
                            [product] => 297
                            [product_option] => 1
                            [qty] => 2
                            [group_id] => 298
                            [group_admin] => 72
                            [group_user] => 63
                            [customers] => [{"name": "Harprit Sing","qty": 1}]
                            [identifier] => AtR4deAVgU4Ensi1_1ac2b33a4df7c5f0cf148d6232074352
                            [added_at] => 2020-12-26 10:56:34
                        )

                )

            [184] => Array
                (
                    [0] => stdClass Object
                        (
                            [id] => 15
                            [order_number] => 2020111618475
                            [group_order_number] => 1605498753184
                            [product] => 174
                            [product_option] => 0
                            [qty] => 1
                            [group_id] => 184
                            [group_admin] => 71
                            [group_user] => 75
                            [customers] => [{"name":"loveena","qty":1}]
                            [identifier] => FqPeYG6L2FVMQFGM_990314138546b9b5ce73df287919ca0a
                            [added_at] => 2020-11-16 07:52:33
                        )

                    [1] => stdClass Object
                        (
                            [id] => 19
                            [order_number] => 2020111618475
                            [group_order_number] => 1605498753184
                            [product] => 102
                            [product_option] => 0
                            [qty] => 1
                            [group_id] => 184
                            [group_admin] => 71
                            [group_user] => 75
                            [customers] => [{"name":"Rima Lagu","qty":1}]
                            [identifier] => FqPeYG6L2FVMQFGM_990314138546b9b5ce73df287919ca0a
                            [added_at] => 2020-12-24 13:01:14
                        )

                )

        )

)

问题

我必须为每个组做各种计算和处理数据。例如,通过计算该组的每个订单(行)来计算该组的总产品数——该组的总折扣。

所以在这里,我想知道如何分别处理每个组(索引)。就像我为分组数组运行 for-each 循环一样,它一次遍历所有组。并且不会得到正确的总和。

例如,

计算组 298,184,... 的产品总数,依此类推。我已将所有方法设置为使用数组中的所有 id 进行计算。

如果您需要更多详细信息或信息,请告诉我。

更新信息

数据库

enter image description here

数据表列

最终结果将显示在下面的数据表中。每组一行。

enter image description here

解决方法

我不确定这是否是您想要的,正如@HTMHell 所建议的那样,这种操作在数据库上速度更快。

<?php

foreach ($result as $id => $group)
{
    $sum = 0;
    foreach ($group as $row)
    {
        $sum += $row['qty']
    }

    echo "group $id total qty: $sum";
}