GraPHP é a biblioteca matemática de gráficos/redes escrita em PHP.
Versão de desenvolvimento: este branch contém o código para a próxima versão 1.0. Para o código da versão 0.9 estável atual, verifique o branch
0.9.x
A próxima versão 1.0 será o caminho a seguir para este pacote. No entanto, ainda ofereceremos suporte ativo à versão 0.9.x para aqueles que ainda não estão na versão mais recente. Consulte também as instruções de instalação para obter mais detalhes.
Índice
Depois de instalado, vamos inicializar um gráfico de amostra:
<?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 );
Vamos ver qual cidade (Vertex) tem uma estrada (ou seja, uma aresta apontando) para Roma:
foreach ( $ rome -> getVerticesEdgeFrom () as $ vertex ) {
echo $ vertex -> getAttribute ( ' name ' ) . ' leads to Rome ' . PHP_EOL ;
// result: Madrid and Rome itself lead to Rome
}
Esta biblioteca é construída em torno do conceito da teoria matemática dos grafos (ou seja, não é uma biblioteca de gráficos para desenhar o gráfico de uma função). Em essência, um grafo é um conjunto de nós com qualquer número de conexões entre eles. Na teoria dos grafos, os vértices (plural de vértice) são uma representação abstrata desses nós , enquanto as conexões são representadas como arestas . As arestas podem ser não direcionadas ("bidirecional") ou direcionadas ("unidirecional", também conhecidas como arestas, arcos).
Dependendo de como as arestas são construídas, todo o gráfico pode ser não direcionado, pode ser um gráfico direcionado (também conhecido como dígrafo) ou ser um gráfico misto. As arestas também podem formar loops (ou seja, uma aresta do vértice A apontando para o vértice A novamente). Além disso, múltiplas arestas do vértice A ao vértice B também são suportadas (também conhecidas como arestas paralelas), formando efetivamente um multigrafo (também conhecido como pseudografo). E, claro, qualquer combinação deles também é suportada. Embora muitos autores tentem diferenciar esses conceitos centrais, esta biblioteca se esforça para não impor quaisquer limitações ou suposições artificiais em seus gráficos.
Esta biblioteca fornece as principais estruturas de dados para trabalhar com gráficos, seus vértices, arestas e atributos.
Existem vários componentes oficiais construídos sobre essas estruturas para fornecer funcionalidades comumente necessárias. Essa arquitetura permite que esses componentes sejam usados de forma independente e somente sob demanda.
A seguir está uma lista de alguns componentes destacados. Uma lista de todos os componentes oficiais pode ser encontrada no projeto graphp.
Esta biblioteca foi construída para suportar a visualização de imagens gráficas, incluindo-as em páginas da web, abrindo imagens de aplicativos CLI e exportando-as como formatos de arquivo PNG, JPEG ou SVG (entre muitos outros). Como o desenho de gráficos é uma área complexa por si só, o layout real do gráfico é deixado para o excelente "Software de visualização de gráficos" do GraphViz e nós apenas fornecemos algumas APIs convenientes para interface com o GraphViz.
Veja graphp/graphviz para mais detalhes.
Além do desenho de gráficos, uma das coisas mais comuns a fazer com gráficos é executar algoritmos para resolver problemas comuns de gráficos. Portanto, esta biblioteca está sendo usada como base para implementações de vários algoritmos gráficos comumente usados:
Veja graphp/algoritmos para mais detalhes.
A forma recomendada de instalar esta biblioteca é através do Composer. Novo no Compositor?
Uma vez lançado, este projeto seguirá o SemVer. No momento, isso instalará a versão de desenvolvimento mais recente:
composer require graphp/graph:^1@dev
Consulte também o CHANGELOG para obter detalhes sobre atualizações de versão.
Este projeto visa rodar em qualquer plataforma e, portanto, não requer nenhuma extensão PHP e suporta execução em PHP 5.3 legado até PHP 8+ atual. É altamente recomendável usar a versão PHP mais recente suportada para este projeto.
Você também pode instalar alguns dos componentes adicionais. Uma lista de todos os componentes oficiais pode ser encontrada no projeto graphp.
Esta biblioteca usa PHPUnit para seu extenso conjunto de testes. Para executar o conjunto de testes, primeiro você precisa clonar este repositório e depois instalar todas as dependências através do Composer:
composer install
Para executar o conjunto de testes, vá até a raiz do projeto e execute:
vendor/bin/phpunit
Esta biblioteca vem com um extenso conjunto de testes e é regularmente testada e usada no mundo real . Apesar disso, esta biblioteca ainda é considerada software beta e sua API está sujeita a alterações. O changelog lista todas as informações relevantes para atualizações entre lançamentos.
Se você encontrar algum problema, não hesite em nos enviar uma mensagem, enviar um relatório de bug ou, melhor ainda, nos fornecer uma solicitação de patch/pull e/ou teste de unidade para reproduzir seu problema.
Além de trabalhar diretamente com o código, qualquer documentação adicional, acréscimos ao nosso leia-me ou até mesmo correção de erros de digitação simples também são apreciados.
Qualquer feedback e/ou contribuição é bem-vindo!
Confira #graphp em irc.freenode.net.
Este projeto é lançado sob a licença permissiva do MIT.
Você sabia que ofereço serviços de desenvolvimento customizado e emissão de notas fiscais para patrocínios de lançamentos e para contribuições? Entre em contato comigo (@clue) para obter detalhes.