php - 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];
但我不知道从这里去哪里。
解决方案
只需创建一个由索引 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]);
}
}
推荐阅读
- javascript - 查找字符,如果存在则增加 1
- c# - Microsoft Teams 订阅电话
- python - 如何修复此错误:“pygame.Surface”对象不可下标
- java - 使用接口作为哈希图中的键
- javascript - 如何在 Flow 中定义一个类变量,以便它扩展另一种类型?
- html - antd 按钮换行文本
- python - 关于 Jupyter 中 Python 解释器的“非线性”行为的问题
- thread-safety - docx4j 中的并行处理
- django - 在登录页面上按下提交按钮时找不到错误页面 (404)
- python-3.x - 与 pandas 进行分组和合并