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)了解詳情。