用php创建图形

时间:2012-03-01 23:39:14

标签: php graph hash

我想在php中创建和存储图形。我有公交车时刻表,所以我决定创建两个班级:

class Vertex 
{
  public $city_id;
  public $time;
}

class Edge
{
  public routeId;
  public end_vertex;
}

在此之后我试图填写我的图表。它应该类似于哈希表,其中键将是Vertex对象,并且它将具有许多边缘。

原型示例:

foreach ($data as $route)
{
  $v = new Vertex($route->startCity, $route->startTime)
  if(!graph[$v]) {
    graph[$v] = [];
  }

  graph[$v].add(new Edge($route->routeId, new Vertex($route->city_id, $route->startTime + $route->arrivalTime)));
}

但是有一个非常大的问题,因为我理解对象不能用作数组键!也许我的方式不对?如何在PHP中正确创建图形?我是新手。

2 个答案:

答案 0 :(得分:1)

在PHP中,只有简单类型可以用作数组索引。复杂类型(如数组,对象和资源)无法正常工作。

编辑哦,如果记忆对我有用,你也应该留意布尔,我似乎回忆起我和他们有过的问题。

Edit2:在您的情况下,对象图应该指向对象,而不是数组。

因此,例如,您的代码如下所示:

$v = new Vertex();

$v->add(new Edge());

$vertices[] = $v;

编辑3:我注意到代码中存在一些严重的语法缺陷。我不知道确切的原因,但是如果你真的不能直截了当,我会建议你给PHP手册一些看。

Edit4:顺便提一下,您使用对象作为数组索引,而不是。类没有PHP数据类型,只有类名,它们是普通字符串。

答案 1 :(得分:0)

请在PHP approach to python's magic __getattr__()查看我的回答,并将其与__toString()方法结合使用。

但如果它更复杂的话,我会把这类东西卸载到像gearman这样的东西上。

还有一个库http://nodebox.net/code/index.php/Graph