用于循环的php数组管理显示堆积的条形图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于循环的php数组管理显示堆积的条形图相关的知识,希望对你有一定的参考价值。

我正在尝试使用此表中的数据创建堆积条形图:

Image of the table

我需要得到这样的结果来制作图表:

['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'];
    }
} 

但我不知道如何以我需要的格式重新组织它。我该怎么做?

答案

而不是仅使用以下方法将行提取到数组中:

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
]);

这可能不是您正在使用的任何图形库所需的,但它应该让您走上正确的轨道。

以上是关于用于循环的php数组管理显示堆积的条形图的主要内容,如果未能解决你的问题,请参考以下文章

使D3堆积条形图填充父SVG容器

较低值的 Jqplot 堆积条形图重叠点标签

ZingChart:具有一系列空值的堆积条形图

在 ggplot2 中的堆积条形图上显示数据值

在 ggplot2 中的堆积条形图上显示数据值

将堆积条形图转换为 100% 比例堆积条形图