Создание графа с помощью php - PullRequest
0 голосов
/ 02 марта 2012

Я хочу создать и сохранить график в php. У меня есть расписание автобусов, поэтому я решил создать 2 класса:

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 ]

1 голос
/ 02 марта 2012

В PHP в качестве индексов массивов могут использоваться только простые типы. Сложные типы, такие как массивы, объекты и ресурсы, не работают должным образом.

Редактировать: О, если память мне не изменяет, вы должны также следить за логическими значениями, я, кажется, вспоминаю проблему, с которой я столкнулся.

Edit2: В вашем случае граф объектов должен указывать на объекты, а не на массив.

Так, например, ваш код будет выглядеть так:

$v = new Vertex();

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

$vertices[] = $v;

Edit3: Я заметил несколько серьезных синтаксических ошибок в вашем коде. Я не знаю точной причины, но если вы действительно не можете понять их прямо, я бы посоветовал вам несколько раз взглянуть на руководство по PHP.

Edit4: Кстати, вы используете объект в качестве индекса массива, а не класс . Не существует типа данных PHP для классов, есть только имена классов, которые являются простыми строками.

0 голосов
/ 02 марта 2012

Смотрите мой ответ здесь Подход PHP к магии питона __getattr __ () и объедините его с методом __toString().

НО я бы разгрузил подобные вещи на что-то вроде gearman , если это что-то более сложное.

И есть библиотека тоже http://nodebox.net/code/index.php/Graph

...