从数据库中排序的动态数组,其中包含一些多个相似的组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不是静态的,可能会有所不同,具体取决于网站管理员面板设置
答案 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
等
答案 2 :(得分:0)
正如其他人在评论中指出的那样,你不能在PHP中使用重复键的数组。最后一个关键属性将覆盖之前的关键属性。这个problematic可能会为您提供替代方案。