我想在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中正确创建图形?我是新手。
答案 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这样的东西上。