首页 > 解决方案 > 如果特定键匹配,则使用相同键对数组值进行分组

问题描述

我有这个数组数组:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [rawMaterialName] => Item1
                    [rawMaterialQuantity] => 560
                    [rawMaterialPrice] => 1250.00
                    [rawMaterialDate] => 2020-05-03
                    [rawMaterialDocument] => AA-00000001
                )

            [1] => Array
                (
                    [id] => 2
                    [rawMaterialName] => Item2
                    [rawMaterialQuantity] => 19
                    [rawMaterialPrice] => 250.00
                    [rawMaterialDate] => 2020-05-04
                    [rawMaterialDocument] => AA-00000002

                )

            [2] => Array
                (
                    [id] => 3
                    [rawMaterialName] => Item3
                    [rawMaterialQuantity] => 260
                    [rawMaterialPrice] => 870.00
                    [rawMaterialDate] => 2020-05-05
                    [rawMaterialDocument] => AA-00000003
                )

            [3] => Array
                (
                    [id] => 4
                    [rawMaterialName] => Item2
                    [rawMaterialQuantity] => 43
                    [rawMaterialPrice] => 480.00
                    [rawMaterialDate] => 2020-05-06
                    [rawMaterialDocument] => AA-00000004
                )

            [4] => Array
                (
                    [id] => 5
                    [rawMaterialName] => Item3
                    [rawMaterialQuantity] => 310
                    [rawMaterialPrice] => 5100.00
                    [rawMaterialDate] => 2020-05-07
                    [rawMaterialDocument] => AA-00000005
                )

            [5] => Array
                (
                    [id] => 6
                    [rawMaterialName] => Item1
                    [rawMaterialQuantity] => 14
                    [rawMaterialPrice] => 830.00
                    [rawMaterialDate] => 2020-05-08
                    [rawMaterialDocument] => AA-00000006
                )

        )

)

rawMaterialName如果键值匹配,我需要使用相同的键对值进行分组。希望得到这样的结果:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [id] => Array
                        (
                            [0] => 1
                            [1] => 6
                        )
                    [rawMaterialName] => Item1
                    [rawMaterialQuantity] => Array
                        (
                            [0] => 560
                            [1] => 14
                        )
                    [rawMaterialPrice] => Array
                        (
                            [0] => 1250.00
                            [1] => 830.00
                    [rawMaterialDate] => Array
                        (
                            [0] => 2020-05-03
                            [1] => 2020-05-08
                    [rawMaterialDocument] => Array
                        (
                            [0] => AA-00000001
                            [1] => AA-00000006
                )

            [1] => Array
                (
                    [id] => Array
                        (
                            [0] => 2
                            [1] => 4
                        )
                    [rawMaterialName] => Item2
                    [rawMaterialQuantity] => Array
                        (
                            [0] => 19
                            [1] => 43
                        )
                    [rawMaterialPrice] => Array
                        (
                            [0] => 250.00
                            [1] => 480.00
                        )
                    [rawMaterialDate] => Array
                        (
                            [0] => 2020-05-04
                            [1] => 2020-05-06
                    [rawMaterialDocument] => Array
                        (
                            [0] => AA-00000002
                            [1] => AA-00000004
                        )

                )

            [2] => Array
                (
                    [id] => Array
                        (
                            [0] => 3
                            [1] => 5
                        )
                    [rawMaterialName] => Item3
                    [rawMaterialQuantity] => Array
                        (
                            [0] => 260
                            [1] => 310
                        )
                    [rawMaterialPrice] => Array
                        (
                            [0] => 870.00
                            [1] => 5100.00
                        )
                    [rawMaterialDate] => Array
                        (
                            [0] => 2020-05-05
                            [1] => 2020-05-07
                        )
                    [rawMaterialDocument] => Array
                        (
                            [0] => AA-00000003
                            [1] => AA-00000005
                        )
                )

        )

)

我不知道如何得到这个结果。有什么想法吗?

标签: phparraysjoinmergematch

解决方案


我通过这种方式解决了:

$newArray = array();
foreach ($data as $element) {
  $newArray[$element['rawMaterialName']]['rawMaterialName'] = $element['rawMaterialName'];
  $newArray[$element['rawMaterialName']]['id'][] = $element['id'];
  $newArray[$element['rawMaterialName']]['rawMaterialQuantity'][] = $element['rawMaterialQuantity'];
  $newArray[$element['rawMaterialName']]['rawMaterialPrice'][] = $element['rawMaterialPrice'];
  $newArray[$element['rawMaterialName']]['rawMaterialDate'][] = $element['rawMaterialDate'];
  $newArray[$element['rawMaterialName']]['rawMaterialDocument'][] = $element['rawMaterialDocument'];
}

$finalArray = array_values($newArray);

推荐阅读