GraPHP 是用 PHP 编写的数学图形/网络库。
开发版本:该分支包含即将发布的 1.0 版本的代码。对于当前稳定的 0.9 版本的代码,请查看
0.9.x
分支。即将发布的 1.0 版本将是该软件包的前进方向。不过,我们仍会积极支持尚未使用最新版本的 0.9.x。另请参阅安装说明以了解更多详细信息。
目录
安装完成后,让我们初始化一个示例图:
<?php
require __DIR__ . ' /vendor/autoload.php ' ;
$ graph = new Graphp Graph Graph ();
// create some cities
$ rome = $ graph -> createVertex ( array ( ' name ' => ' Rome ' ));
$ madrid = $ graph -> createVertex ( array ( ' name ' => ' Madrid ' ));
$ cologne = $ graph -> createVertex ( array ( ' name ' => ' Cologne ' ));
// build some roads
$ graph -> createEdgeDirected ( $ cologne , $ madrid );
$ graph -> createEdgeDirected ( $ madrid , $ rome );
// create loop
$ graph -> createEdgeDirected ( $ rome , $ rome );
让我们看看哪个城市(Vertex)有一条通往罗马的路(即一条边指向):
foreach ( $ rome -> getVerticesEdgeFrom () as $ vertex ) {
echo $ vertex -> getAttribute ( ' name ' ) . ' leads to Rome ' . PHP_EOL ;
// result: Madrid and Rome itself lead to Rome
}
该库是围绕数学图论的概念构建的(即它不是用于绘制函数图的图表库)。本质上,图是一组节点,节点之间有任意数量的连接。在图论中,顶点(复数 vertex)是这些节点的抽象表示,而连接则表示为边。边可以是无向的(“双向”)或有向的(“单向”,又名双边、弧)。
根据边的构造方式,整个图可以是无向的,可以是有向图(又名有向图),也可以是混合图。边也可以形成循环(即从顶点 A 开始的边再次指向顶点 A)。此外,还支持从顶点 A 到顶点 B 的多条边(又名平行边),有效地形成多重图(又名伪图)。当然,也支持其任意组合。虽然许多作者试图区分这些核心概念,但该库尽力不对您的图表强加任何人为的限制或假设。
该库提供了处理图、其顶点、边和属性的核心数据结构。
有几个官方组件构建在这些结构之上,以提供常用的功能。该架构允许这些组件独立且仅按需使用。
以下是一些突出显示的组件的列表。所有官方组件的列表可以在 graphp 项目中找到。
该库旨在支持可视化图形图像,包括将它们放入网页中、从 CLI 应用程序中打开图像并将其导出为 PNG、JPEG 或 SVG 文件格式(以及其他许多格式)。由于图形绘制本身就是一个复杂的领域,因此图形的实际布局留给了优秀的 GraphViz“图形可视化软件”,我们仅提供一些方便的 API 来与 GraphViz 交互。
有关更多详细信息,请参阅 graphp/graphviz。
除了绘制图形之外,对图形最常见的操作之一是运行算法来解决常见的图形问题。因此,该库被用作许多常用图算法实现的基础:
有关更多详细信息,请参阅 graphp/algorithms。
推荐的安装此库的方法是通过 Composer。作曲家新手?
一旦发布,该项目将遵循 SemVer。目前,这将安装最新的开发版本:
composer require graphp/graph:^1@dev
有关版本升级的详细信息,另请参阅变更日志。
该项目旨在在任何平台上运行,因此不需要任何 PHP 扩展,并支持在旧版 PHP 5.3 到当前 PHP 8+ 上运行。强烈建议为此项目使用最新支持的 PHP 版本。
您可能还想安装一些附加组件。所有官方组件的列表可以在 graphp 项目中找到。
该库使用 PHPUnit 作为其广泛的测试套件。要运行测试套件,您首先需要克隆此存储库,然后通过 Composer 安装所有依赖项:
composer install
要运行测试套件,请转到项目根目录并运行:
vendor/bin/phpunit
该库附带了广泛的测试套件,并定期在现实世界中进行测试和使用。尽管如此,该库仍被视为测试版软件,其 API 可能会发生变化。更改日志列出了版本之间更新的所有相关信息。
如果您遇到任何问题,请随时给我们留言、提交错误报告,甚至最好向我们提供补丁/拉取请求和/或单元测试来重现您的问题。
除了直接使用代码之外,任何额外的文档、自述文件的补充甚至修复简单的拼写错误也同样受到赞赏。
欢迎任何反馈和/或贡献!
在 irc.freenode.net 上查看#graphp。
该项目是在 MIT 许可下发布的。
您是否知道我提供定制开发服务并为发布赞助和贡献开具发票?联系我(@clue)了解详情。