GraPHP adalah perpustakaan grafik/jaringan matematika yang ditulis dalam PHP.
Versi pengembangan: Cabang ini berisi kode untuk rilis 1.0 mendatang. Untuk kode rilis stabil 0.9 saat ini, lihat cabang
0.9.x
Rilis 1.0 mendatang akan menjadi langkah maju untuk paket ini. Namun, kami akan tetap aktif mendukung 0.9.x bagi mereka yang belum menggunakan versi terbaru. Lihat juga petunjuk pemasangan untuk lebih jelasnya.
Daftar isi
Setelah terinstal, mari kita inisialisasi contoh grafik:
<?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 );
Mari kita lihat kota mana (Vertex) yang memiliki jalan (yaitu sebuah tepi yang menunjuk) ke Roma:
foreach ( $ rome -> getVerticesEdgeFrom () as $ vertex ) {
echo $ vertex -> getAttribute ( ' name ' ) . ' leads to Rome ' . PHP_EOL ;
// result: Madrid and Rome itself lead to Rome
}
Perpustakaan ini dibangun berdasarkan konsep teori grafik matematika (yaitu bukan perpustakaan grafik untuk menggambar grafik suatu fungsi). Intinya, grafik adalah sekumpulan node dengan sejumlah koneksi di antaranya. Dalam teori graf, simpul (jamak dari simpul) merupakan representasi abstrak dari simpul-simpul tersebut, sedangkan koneksi direpresentasikan sebagai sisi . Tepinya bisa tidak berarah ("dua arah") atau berarah ("satu arah", alias di-edges, busur).
Bergantung pada bagaimana sisi-sisinya dibuat, keseluruhan graf dapat berupa graf tidak berarah, dapat berupa graf berarah (alias digraf) atau berupa graf campuran. Sisi-sisinya juga diperbolehkan untuk membentuk loop (yaitu suatu sisi dari titik A menunjuk ke titik A lagi). Selain itu, beberapa sisi dari titik A ke titik B juga didukung (alias sisi paralel), yang secara efektif membentuk multigraf (alias pseudograf). Dan tentu saja, kombinasi apa pun juga didukung. Meskipun banyak penulis mencoba membedakan konsep inti ini, pustaka ini berusaha keras untuk tidak memaksakan batasan atau asumsi buatan apa pun pada grafik Anda.
Pustaka ini menyediakan struktur data inti untuk bekerja dengan grafik, simpul, tepi, dan atributnya.
Ada beberapa komponen resmi yang dibangun di atas struktur ini untuk menyediakan fungsionalitas yang umumnya dibutuhkan. Arsitektur ini memungkinkan komponen-komponen ini untuk digunakan secara mandiri dan hanya berdasarkan permintaan.
Berikut ini adalah daftar beberapa komponen yang disorot. Daftar semua komponen resmi dapat ditemukan di proyek graphp.
Pustaka ini dibuat untuk mendukung visualisasi gambar grafik, memasukkannya ke dalam halaman web, membuka gambar dari dalam aplikasi CLI dan mengekspornya sebagai format file PNG, JPEG, atau SVG (di antara banyak lainnya). Karena gambar grafik merupakan area yang kompleks, tata letak grafik yang sebenarnya diserahkan kepada "Perangkat Lunak Visualisasi Grafik" GraphViz yang sangat baik dan kami hanya menyediakan beberapa API yang mudah digunakan untuk berinteraksi dengan GraphViz.
Lihat graphp/graphviz untuk lebih jelasnya.
Selain menggambar grafik, salah satu hal paling umum yang dilakukan dengan grafik adalah menjalankan algoritma untuk menyelesaikan masalah grafik umum. Oleh karena itu, perpustakaan ini digunakan sebagai dasar implementasi sejumlah algoritma grafik yang umum digunakan:
Lihat grafik/algoritma untuk lebih jelasnya.
Cara yang disarankan untuk menginstal perpustakaan ini adalah melalui Komposer. Baru mengenal Komposer?
Setelah dirilis, proyek ini akan mengikuti SemVer. Saat ini, ini akan menginstal versi pengembangan terbaru:
composer require graphp/graph:^1@dev
Lihat juga CHANGELOG untuk detail tentang peningkatan versi.
Proyek ini bertujuan untuk berjalan pada platform apa pun sehingga tidak memerlukan ekstensi PHP apa pun dan mendukung berjalan pada PHP 5.3 lama hingga PHP 8+ saat ini. Sangat disarankan untuk menggunakan versi PHP terbaru yang didukung untuk proyek ini.
Anda mungkin juga ingin menginstal beberapa komponen tambahan. Daftar semua komponen resmi dapat ditemukan di proyek graphp.
Perpustakaan ini menggunakan PHPUnit untuk rangkaian pengujiannya yang ekstensif. Untuk menjalankan test suite, Anda harus mengkloning repo ini terlebih dahulu, lalu menginstal semua dependensi melalui Composer:
composer install
Untuk menjalankan rangkaian pengujian, buka root proyek dan jalankan:
vendor/bin/phpunit
Perpustakaan ini dilengkapi dengan rangkaian pengujian yang ekstensif dan diuji serta digunakan secara berkala di dunia nyata . Meskipun demikian, perpustakaan ini masih dianggap sebagai perangkat lunak beta dan API-nya dapat berubah. Changelog mencantumkan semua informasi relevan untuk pembaruan antar rilis.
Jika Anda mengalami masalah apa pun, jangan ragu untuk menghubungi kami, mengajukan laporan bug, atau bahkan memberikan kami permintaan patch/pull dan/atau pengujian unit untuk mereproduksi masalah Anda.
Selain langsung bekerja dengan kode, dokumentasi tambahan apa pun, penambahan pada readme kami, atau bahkan perbaikan kesalahan ketik sederhana juga akan dihargai.
Umpan balik dan/atau kontribusi apa pun dipersilakan!
Lihat #graphp di irc.freenode.net.
Proyek ini dirilis di bawah lisensi MIT yang permisif.
Tahukah Anda bahwa saya menawarkan layanan pengembangan khusus dan menerbitkan faktur untuk sponsor rilis dan kontribusi? Hubungi saya (@petunjuk) untuk detailnya.