我正在尝试使用此表中的数据创建堆积的条形图:
我需要得到这样的结果才能制作图形:
['oxygen','cpap']
Prospecting [10,12]
Qualification [15,8]
所有产品的清单以及每个销售阶段的数组,其中包含每种产品的数量。
我可以从下表中获取产品名称列表:
$sql = "SELECT * FROM target_products";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$product_name[] = $row['product_name'];
}
}
但是我不知道如何以图表所需的格式重新组织它。我该怎么办?
答案 0 :(得分:0)
与此不同,不仅仅是将行提取到数组中:
while($row = $result->fetch_assoc()) {
$product_name[] = $row['product_name'];
}
获得所需结构的总体思路是:
while($row = $result->fetch_assoc()) {
$graph_data[$row['sales_stage']][$row['product_name']] = $row['qty'];
// rows columns values
}
这将创建一个结构,其中每一行都是一个sales_stage
,每一列都是一个属于该阶段的product_name
。
尽管通常不是那么简单。某些阶段可能包含其他产品没有的产品,因此您可能需要跟踪所有产品并将图形数据的缺失值设置为零。
因此请随身携带所有产品清单
$all_products = [];
while($row = $result->fetch_assoc()) {
$all_products[$row['product_name']] = 0;
$graph_data[$row['sales_stage']][$row['product_name']] = $row['qty'];
}
然后,在拥有所有数据之后,可以将每一行与完整的产品列表合并,以便每个sales_stage
的值与产品标题匹配。
foreach ($graph_data as $sales_stage => $stage_products) {
$graph_data[$sales_stage] = array_values(array_merge($all_products, $stage_products));
}
然后您可以获得所需的结果:
echo json_encode([
array_keys($all_products),
$graph_data
]);
对于所使用的任何图形库,这可能都不是您真正需要的,但是它应该可以使您走上正确的轨道。