每次在php中有不同的group_id编号时,将数组拆分成组

时间:2018-04-20 17:45:16

标签: php

从数据库中排序的动态数组,其中包含一些多个相似的组ID,以及一些不同的动态数组:

 $sourcearray = array(
 array(id => 1  , value => 'text'),
 array(id => 1  , value => 'text'),
 array(id => 1  , value => 'text'),
 array(id => 1  , value => 'text'),

 array(id => 2  , value => 'text'),
 array(id => 3  , value => 'text'),

 array(id => 4  , value => 'text'),
 array(id => 4  , value => 'text')
 );

我想将它们分成具有相同组ID的组 类似的东西:

 $group1 = array(
 array(id => 1  , value => 'text'),
 array(id => 1  , value => 'text'),
 array(id => 1  , value => 'text'),
 array(id => 1  , value => 'text')
 );

 $group2 = array(
  array(id => 2  , value => 'text')
 );    

 $group3 = array(
  array(id => 3  , value => 'text')
 ); 

 $group4 = array(
  array(id => 4  , value => 'text'),
  array(id => 4  , value => 'text')
 ); 

此ID不是唯一的,这种安排和群组ID不是静态的,可能会有所不同,具体取决于网站管理员面板设置

3 个答案:

答案 0 :(得分:3)

我建议这样做的方法是,在您从查询中获取行时,使用要分组的特定列将结果分组到一个数组中。

while ($row = $query->fetch()) {
    $result[$row['id']][] = $row;
}

这将产生如下结果:

$groups = [
    1 => [
        ['id' => 1, 'value' => 'text'],
        ['id' => 1, 'value' => 'text'],
        ['id' => 1, 'value' => 'text'],
        ['id' => 1, 'value' => 'text']
    ],
    2 => [
        ['id' => 2, 'value' => 'text']
    ],
    3 => [
        ['id' => 3, 'value' => 'text']
    ],
    4 => [
        ['id' => 4, 'value' => 'text'],
        ['id' => 4, 'value' => 'text']
    ]
];

比每个组的单独变量更容易使用。

答案 1 :(得分:2)

您可以使用Sub Pyramid() Dim cht As Chart Set cht = Worksheets("AP-Chart").ChartObjects("Chart 4").Chart For Each cell In Range("C3:D11") If cell.Value < -15 Then cht.Axes(xlCategory).MinimumScale = -20 cht.Axes(xlValue, xlSecondary).MinimumScale = -20 ElseIf cell.Value > 15 Then cht.Axes(xlCategory).MaximumScale = 20 cht.Axes(xlValue, xlSecondary).MaximumScale = 20 ElseIf cell.Value < -20 Then cht.Axes(xlCategory).MinimumScale = -30 cht.Axes(xlValue, xlSecondary).MinimumScale = -30 ElseIf cell.Value > 20 Then cht.Axes(xlCategory).MaximumScale = 30 cht.Axes(xlValue, xlSecondary).MaximumScale = 30 ElseIf cell.Value < -30 Then cht.Axes(xlCategory).MinimumScale = -40 cht.Axes(xlValue, xlSecondary).MinimumScale = -40 ElseIf cell.Value > 30 Then cht.Axes(xlCategory).MaximumScale = 40 cht.Axes(xlValue, xlSecondary).MaximumScale = 40 ElseIf cell.Value < -40 Then cht.Axes(xlCategory).MinimumScale = -50 cht.Axes(xlValue, xlSecondary).MinimumScale = -50 ElseIf cell.Value > 40 Then cht.Axes(xlCategory).MaximumScale = 50 cht.Axes(xlValue, xlSecondary).MaximumScale = 50 End If Next cell ActiveSheet.ChartObjects("Chart 4").Activate ActiveChart.ChartArea.Select myPDF = "\\stchsfs\arboari$\Profile-Data\Desktop\Export Trial1\c1-" & Sheets("AP").Range("C" & i + 3).Value2 & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myPDF, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False i = i + 1 Next counter End Sub 将日期汇总到关联数组中。您可以使用reduce将变量从数组

导入当前符号表
extract

现在您可以使用$sourcearray = array( array("id" => 1 , "value" => 'text'), array("id" => 1 , "value" => 'text'), array("id" => 1 , "value" => 'text'), array("id" => 1 , "value" => 'text'), array("id" => 2 , "value" => 'text'), array("id" => 3 , "value" => 'text'), array("id" => 4 , "value" => 'text'), array("id" => 4 , "value" => 'text') ); $result = array_reduce($sourcearray, function($c, $v){ $c[ 'group' . $v['id'] ][] = $v; return $c; }, array()); extract($result); //Optional. If you want to use variable like $group1, $group2 etc $group1

文档:array_reduceextract

答案 2 :(得分:0)

正如其他人在评论中指出的那样,你不能在PHP中使用重复键的数组。最后一个关键属性将覆盖之前的关键属性。这个problematic可能会为您提供替代方案。