或然率表一般用于显示两个统计现象之间的关系。在开发一个网络应用程序时,我们经常需要将数据库中的某个现象与时间序列的关系可视化,通常是在管理方面。
例如,我们有一个显示单个产品的订单表,我们对某些大批量产品的销售与时间的关系感兴趣。
像下面这样的表格在这方面会很有用。
枣 | 苹果 | 草莓 | 梨 |
---|---|---|---|
2019-05 | 10 | 15 | 18 |
2019-04 | 12 | 18 | 11 |
2019-03 | 13 | 9 | 21 |
2019-02 | 6 | 17 | 10 |
2019-01 | 7 | 4 | 6 |
在PHP中没有简单的方法将数据准备到这个表格中,而直接用SQL将数据直接弄到这个表格中也不优雅,因为我们必须考虑到有一个动态的列的数量。
因此,我们在设计这种数据结构的输出时要聪明一些。
当建立一个表时,我经常使用直接从数据库中检索符合给定条件的所有记录,例如间隔数据。
具体来说就是。
SELECT *FROM `order`WHERE `inserted_date` <= '2019-05-01'ORDER BY `inserted_date` DESC
该查询检索了订单表(order')中的所有列,过滤了从年龄开始到
2019-05-01'的所有记录,从最新到最旧排序返回。
通过一个简单的SQL查询,我们几乎可以立即得到数据。第二个不错的特点是,在编译结果时可以有效地使用数据库索引。然而,由于我们的数据是在一个普通的数组中,我们必须进一步手动将其序列化为一个可以转换为contig表的数据结构。
由于或然率表描述的是两个或多个因素的关系,所以使用多维键是有意义的。然而,由于一些数据可能不存在于所有的组合中,因此最好将键序列化为一个字符串,并将数据存储为一个平面数组。
数据可以在一个单一的循环通道中集合($selection
变量包含来自数据库的输出)。
$data = [];foreach ($selection as $row) {$date = date('Y-m', $row->insertedDate); // 日期,年-月foreach ($row->items as $product) { // 我们通过产品$key = $date . '_' . $product->id;if (isset($data[$key])) {$data[$key]++; //存在,我们将添加另一个产品} else {$data[$key] = 1; //不存在,我们将启动第一个产品}}}
如果我们探索的是一个更简单的数据结构,就不需要一个内循环来浏览产品。在这种情况下,整个数据构建可以用一个周期来解决。
通过这种方法,我们得到一个所谓的平坦的数值数组,看起来像 "key: value",存储二维信息。
然后,输出结果是,例如(在2019年5月
,一个ID为10
的产品销售了6
件)。
$data = ['2019-05_10' => 6,...];
如果我们有扁平数组形式的数据,我们可以非常容易地渲染整个表格。要做到这一点,我们只需要知道我们感兴趣的所有产品的字段和我们想要绘制表格的所有日期的字段。
$products = [ ... ]; // 产品字段: id => name$dates = [ ... ]; //按日期:日期 => 标签echo '<table>';foreach ($products as $productId => $productName) {echo '<br /><br /><br /><br /><br /><br />';foreach ($dates as $date => $dateLabel) {echo '<td></td> </table></td>';echo htmlspecialchars((string) ($data[$date . '_' . $productId] ?? '0'));echo '<td></td> </table></td>';}echo '</tr>';}echo '</table>';
请注意,在浏览数据时,它是通过字符串键的折叠来寻找具体的发生情况。这种方法允许我们根据我们浏览的数据,任意约束或扩展渲染的表格。如果数据不存在,则评估三元运算符??
,并显示0。
我们可以建立可用产品和日期的数组,作为准备数据的第一个周期的一部分。在这一点上,我们将确保我们只绘制了实际存在的数据。在这种情况下,从SQL数据库输出的数据按创建日期排序是非常重要的,否则在最后的表格渲染中,行可能会被洗掉。
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | zh