我可以使用以下SQL数据提取格式存储在变量$data
中。
YEAR QUARTER CAT NAME ASSMT_TOTAL
2011 Q2 2011-Q2 Place-1 18
2011 Q3 2011-Q3 Place-1 22
2011 Q4 2011-Q4 Place-2 34
2011 Q3 2011-Q3 Place-2 21
2011 Q4 2011-Q4 Place-2 23
我正在尝试构建一个包含数组数组的“final”数组。每个数组都如下所示:
[name] => Place-1
[type] => line
[data] => Array
(
[0] => 18
[1] => 22
...
)
我已经完成了绝大多数,但我很少在place
没有特定类别的记录的情况下挣扎。
$names
是所有地点的数组,$cats
是所有可用类别名称(2011-Q2
)的数组。
foreach($names as $s)
{
foreach($cats as $c)
{
$temp['name'] = $s;
$temp['type'] = 'line';
foreach($data as $d)
{
if($s === $d['NAME'] && $c === $d['CAT'])
{
$temp['data'][] = (int)$d['ASSMT_TOTAL'];
break;
}
//$temp['data'][] = 0;
}
}
$final[] = $temp;
unset($temp);
}
上述方法效果很好,除了处理网站没有相应类别的奇怪时间。例如,在我的示例数据中,place-2
没有2011年第二季度的CAT。在这种情况下如何插入零。我也想知道双循环情况的更优雅的解决方案。
答案 0 :(得分:1)
由于你已经有了一个$ cats的列表,你可以比较你的行类别(我假设$ d [' CAT'])与该数组相比,并使它成为一个极端情况。
$catFoundMarker = false;
foreach($data as $d)
{
if($s === $d['NAME'] && $c === $d['CAT'])
{
$temp['data'][] = (int)$d['ASSMT_TOTAL'];
$catFoundMarker = true;
break;
}
}
if(!$catFoundMarker){
$temp['data'][] = 0;
}
您可以为“' NAME”创建一个类似的角落案例。不存在。
编辑:抱歉,更新了in_array函数中的错误 EDIT2:更新的解决方案