GraPHP est la bibliothèque de graphiques/réseaux mathématiques écrite en PHP.
Version de développement : cette branche contient le code de la prochaine version 1.0. Pour le code de la version stable 0.9 actuelle, consultez la branche
0.9.x
La prochaine version 1.0 sera la voie à suivre pour ce package. Cependant, nous prendrons toujours activement en charge la version 0.9.x pour ceux qui ne disposent pas encore de la dernière version. Voir également les instructions d'installation pour plus de détails.
Table des matières
Une fois installé, initialisons un exemple de graphique :
<?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 );
Voyons quelle ville (Vertex) a une route (c'est-à-dire un bord pointant) vers Rome :
foreach ( $ rome -> getVerticesEdgeFrom () as $ vertex ) {
echo $ vertex -> getAttribute ( ' name ' ) . ' leads to Rome ' . PHP_EOL ;
// result: Madrid and Rome itself lead to Rome
}
Cette bibliothèque est construite autour du concept de théorie mathématique des graphes (c'est-à-dire qu'il ne s'agit pas d'une bibliothèque graphique permettant de dessiner le graphique d'une fonction). Essentiellement, un graphe est un ensemble de nœuds avec un nombre quelconque de connexions entre eux. Dans la théorie des graphes, les sommets (pluriel de sommet) sont une représentation abstraite de ces nœuds , tandis que les connexions sont représentées sous forme d'arêtes . Les bords peuvent être soit non orientés (« bidirectionnels ») soit dirigés (« unidirectionnels », autrement dit di-edges, arcs).
Selon la manière dont les arêtes sont construites, le graphe entier peut être soit non orienté, soit un graphe orienté (alias digraphe) ou un graphe mixte. Les arêtes peuvent également former des boucles (c'est-à-dire une arête du sommet A pointant à nouveau vers le sommet A). En outre, plusieurs arêtes du sommet A au sommet B sont également prises en charge (c'est-à-dire les arêtes parallèles), formant efficacement un multigraphe (c'est-à-dire un pseudographe). Et bien sûr, toute combinaison de ces éléments est également prise en charge. Alors que de nombreux auteurs tentent de différencier ces concepts fondamentaux, cette bibliothèque s'efforce de ne pas imposer de limitations ou d'hypothèses artificielles sur vos graphiques.
Cette bibliothèque fournit les structures de données de base pour travailler avec des graphiques, leurs sommets, arêtes et attributs.
Il existe plusieurs composants officiels construits au-dessus de ces structures pour fournir les fonctionnalités couramment nécessaires. Cette architecture permet à ces composants d'être utilisés indépendamment et à la demande uniquement.
Voici une liste de quelques composants mis en évidence. Une liste de tous les composants officiels peut être trouvée dans le projet graphp.
Cette bibliothèque est conçue pour prendre en charge la visualisation d'images graphiques, les inclure dans des pages Web, ouvrir des images à partir d'applications CLI et les exporter aux formats de fichier PNG, JPEG ou SVG (parmi bien d'autres). Étant donné que le dessin de graphiques est un domaine complexe en soi, la mise en page réelle du graphique est laissée à l'excellent "Logiciel de visualisation de graphiques" GraphViz et nous fournissons simplement quelques API pratiques pour s'interfacer avec GraphViz.
Voir graphp/graphviz pour plus de détails.
Outre le dessin de graphiques, l’une des activités les plus courantes avec les graphiques consiste à exécuter des algorithmes pour résoudre des problèmes graphiques courants. Par conséquent, cette bibliothèque est utilisée comme base pour l’implémentation d’un certain nombre d’algorithmes graphiques couramment utilisés :
Voir graphp/algorithmes pour plus de détails.
La méthode recommandée pour installer cette bibliothèque consiste à utiliser Composer. Nouveau sur Compositeur ?
Une fois publié, ce projet suivra SemVer. Pour le moment, cela installera la dernière version de développement :
composer require graphp/graph:^1@dev
Voir également le CHANGELOG pour plus de détails sur les mises à niveau de version.
Ce projet vise à fonctionner sur n'importe quelle plate-forme et ne nécessite donc aucune extension PHP et prend en charge l'exécution sur l'ancien PHP 5.3 jusqu'à l'actuel PHP 8+. Il est fortement recommandé d'utiliser la dernière version de PHP prise en charge pour ce projet.
Vous souhaiterez peut-être également installer certains composants supplémentaires. Une liste de tous les composants officiels peut être trouvée dans le projet graphp.
Cette bibliothèque utilise PHPUnit pour sa vaste suite de tests. Pour exécuter la suite de tests, vous devez d'abord cloner ce dépôt, puis installer toutes les dépendances via Composer :
composer install
Pour exécuter la suite de tests, accédez à la racine du projet et exécutez :
vendor/bin/phpunit
Cette bibliothèque est livrée avec une suite de tests complète et est régulièrement testée et utilisée dans le monde réel . Malgré cela, cette bibliothèque est toujours considérée comme un logiciel bêta et son API est susceptible de changer. Le journal des modifications répertorie toutes les informations pertinentes pour les mises à jour entre les versions.
Si vous rencontrez des problèmes, n'hésitez pas à nous écrire, à déposer un rapport de bug ou, mieux encore, à nous fournir une demande de correctif/pull et/ou un test unitaire pour reproduire votre problème.
En plus de travailler directement avec le code, toute documentation supplémentaire, les ajouts à notre fichier readme ou même la correction de simples fautes de frappe sont tout aussi appréciés.
Tout retour et/ou contribution est la bienvenue !
Découvrez #graphp sur irc.freenode.net.
Ce projet est publié sous la licence permissive MIT.
Saviez-vous que j'offre des services de développement personnalisés et que j'émets des factures pour les parrainages de sorties et pour les contributions ? Contactez-moi (@clue) pour plus de détails.