首页 > 解决方案 > PHP 根据键从主数组创建子数组

问题描述

这与 PHP 有关。我有一个数组数组,它​​是来自 db 查询的记录集:

Array
(
    [0] => Array
        (
            [0] => Amazon
            [1] => AmazonSendTracking
            [2] => 
            [3] => 1
            [4] => IN
            [5] => 2020-01-07 11:32:18
            [6] => 7
            [7] => 5
        )

    [1] => Array
        (
            [0] => Amazon
            [1] => AmazonGetOrdersAndMove
            [2] => 
            [3] => 4
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 6
            [7] => 4
        )

    [2] => Array
        (
            [0] => Test
            [1] => RedirectTest1
            [2] => data=data1&data2=data2&testvar=testvariable
            [3] => 4
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 19
            [7] => 17
        )

    [3] => Array
        (
            [0] => Test
            [1] => RedirectTest2
            [2] => data=value&data2=value2&testvar=value3
            [3] => 4
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 19
            [7] => 25
        )

    [4] => Array
        (
            [0] => Amazon
            [1] => AmazonPushInventory
            [2] => 
            [3] => 15
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 27
            [7] => 26
        )

    [5] => Array
        (
            [0] => Amazon
            [1] => CalculateFloorCeiling
            [2] => 
            [3] => 15
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 27
            [7] => 27
        )

    [6] => Array
        (
            [0] => Amazon
            [1] => AmazonSubmitPricingXML
            [2] => 
            [3] => 15
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 27
            [7] => 28
        )

    [7] => Array
        (
            [0] => Amazon
            [1] => AmazonSubmitPricingXMLResetBusinessAndFlipEm
            [2] => 
            [3] => 1440
            [4] => OUT
            [5] => 
            [6] => 8
            [7] => 6
        )

)

子数组的第 7 位 (6) 中的值表示我想要分解为单个数组的“组”。

所以我希望上面成为一个不在任何组中的项目数组,然后为每个组创建一个新数组,如下所示:

Array1 - 不在一个组中的所有项目

Array1
(
    [0] => Array
        (
            [0] => Amazon
            [1] => AmazonSendTracking
            [2] => 
            [3] => 1
            [4] => IN
            [5] => 2020-01-07 11:32:18
            [6] => 7
            [7] => 5
        )

    [1] => Array
        (
            [0] => Amazon
            [1] => AmazonGetOrdersAndMove
            [2] => 
            [3] => 4
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 6
            [7] => 4
        )
    [2] => Array
        (
            [0] => Amazon
            [1] => AmazonSubmitPricingXMLResetBusinessAndFlipEm
            [2] => 
            [3] => 1440
            [4] => OUT
            [5] => 
            [6] => 8
            [7] => 6
        )
)

Array2 - 第一组

Array2(
 [0] => Array
        (
            [0] => Test
            [1] => RedirectTest1
            [2] => data=data1&data2=data2&testvar=testvariable
            [3] => 4
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 19
            [7] => 17
        )

    [1] => Array
        (
            [0] => Test
            [1] => RedirectTest2
            [2] => data=value&data2=value2&testvar=value3
            [3] => 4
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 19
            [7] => 25
        )
)

Array3 - 第二组

Array3(
    [0] => Array
        (
            [0] => Amazon
            [1] => AmazonPushInventory
            [2] => 
            [3] => 15
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 27
            [7] => 26
        )

    [1] => Array
        (
            [0] => Amazon
            [1] => CalculateFloorCeiling
            [2] => 
            [3] => 15
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 27
            [7] => 27
        )

    [2] => Array
        (
            [0] => Amazon
            [1] => AmazonSubmitPricingXML
            [2] => 
            [3] => 15
            [4] => ALL
            [5] => 2020-01-07 11:32:18
            [6] => 27
            [7] => 28
        )
)

我只是不确定最好使用哪些数组函数来完成此任务。我尝试使用以下方法获取每个组的计数。我有一个循环遍历主数组(数组数组调用 $rs),而在循环中,我将第 7 个位置拉到一个名为 $HeaderRecNbr 的变量中,然后执行以下操作:

$GroupCount=array_count_values(array_column($rs, 6))[$HeaderRecNbr];

但我不知道从这里去哪里。

标签: phparraysloopssubset

解决方案


只需创建一个由索引 6 开始的组索引的数组。这将为由组号索引的每个组创建一个子数组:

foreach($array as $v) {
    $groups[$v[6]][] = $v;
}

然后要获取一组中单独的项目,检查是否恰好有一个子数组并将其添加到另一个数组中。然后将其从组数组中删除:

foreach($groups as $k => $v) {
    if(count($v) == 1) {
        $other[] = $v;  // or $other[$v[0][6]][] = $v;
        unset($groups[$k]);
    }
}

推荐阅读