为了账号安全,请及时绑定邮箱和手机立即绑定

PHP 根据键从主数组创建子数组

PHP 根据键从主数组创建子数组

PHP
繁华开满天机 2022-07-16 16:09:48
这与 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        )子数组的第 7 位 (6) 中的值表示我想要分解为单个数组的“组”。所以我希望上面成为一个不在任何组中的项目数组,然后为每个组创建一个新数组,如下所示:Array1 - 不在一个组中的所有项目我只是不确定最好使用哪些数组函数来完成此任务。我尝试使用以下方法获取每个组的计数。我有一个循环遍历主数组(数组数组调用 $rs),而在循环中,我将第 7 个位置拉到一个名为 $HeaderRecNbr 的变量中,然后执行以下操作:$GroupCount=array_count_values(array_column($rs, 6))[$HeaderRecNbr];但我不知道从这里去哪里。
查看完整描述

3 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

只需创建一个由索引 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]);

    }

}


查看完整回答
反对 回复 2022-07-16
?
绝地无双

TA贡献1946条经验 获得超4个赞

    $mainArray = ... all rows variable here..

$groupedArray = [];

$countArray = [];

foreach ($mainArray as $k => $v) {

    $groupedArray[$v[6]][] = $v;

    $countArray[$v[6]]++;

}

$singleItems = [];

$multipleItems = [];

foreach ($groupedArray as $k => $v) {

    if ($countArray[$k] > 1) $multipleItems[] = $v;

    else $singleItems = $v;

}


... do something with single and multi - groups...

1:首先按子数组的第 6 个项目将所有项目分组...同时保持计数 2. 将单个和多个项目组分隔在 2 个数组中... 3. 对多个项目做任何你需要的事情团体。


查看完整回答
反对 回复 2022-07-16
?
LEATH

TA贡献1936条经验 获得超6个赞

此函数将按所需索引对它们进行分组,然后将没有任何其他具有相同索引的那些组合起来,并返回一个数组数组,未分组,然后全部分组。


function sortByIndex( $data, $index ) {

    $sortedData = array();

    $ungroupedData = array();

    // Make sure you can loop through

    if ( ! is_array( $data ) ) {

        return FALSE;

    }

    foreach ( $data as $key => $arrayToInspect ) {

        if ( ! isset( $sortedData[$arrayToInspect[$index]] ) ) {

            $sortedData[$arrayToInspect[$index]] = array();

        }

        $sortedData[$arrayToInspect[$index]][] = $arrayToInspect;

    }


    // Combine as desired

    foreach ( $sortedData as $groupId => $data ) {

        if ( count( $data ) < 2 ) {

            $ungroupedData[] = $data;

            unset( $sortedData[$groupId] );

        }

    }

    return ( array_merge( [ $ungroupedData ], array_values( $sortedData ) ) );

}


查看完整回答
反对 回复 2022-07-16
  • 3 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信