Graphvizとは
ファイル構造とかクラスの継承関係などを見える化するのに便利なツールです。本来DOTという言語で書かれたものをビジュアライズさせるツールだそうです。
必要なものをインストール
そんな便利なGraphvizを今回はPHPから扱いたいと思います。
Graphviz自体とそれをPHPから使うためのパッケージをPEARからインストールします。
$ brew install graphviz
$ pear install Image_GraphViz
# サンプルコード
例としてA-Zの文字列を二分木しました。階層ごとにフォントを小さくしてます。
<?php
require_once 'Image/GraphViz.php';
$a = range('A','Z');
$font_size = 20;
$file_name = 'data.png';
$g = new Image_GraphViz();
// ノードの登録
for ($i=0; $i < count($a); $i++) {
$g->addNode(
$a[$i],
[
'fontsize' => $font_size*(0.8**(strlen(decbin($i+1))-1)),
'shape' => 'box'
]
);
}
// エッジの登録
for ($i=0; $i < count($a); $i++) {
if ($i != 0) {
$g->addEdge(
[
$a[floor(($i-1)/2)] => $a[$i]
],
[
'label' => $a[floor(($i-1)/2)].'_'.$a[$i]
]
);
}
}
// PNGで出力
file_put_contents($file_name,$g->fetch('png'));
ノードを登録し、それらをエッジで結ぶように書くだけ。実にシンプルです。