john.brown
просто кулибин
Помогите с алгоритмом. Цепочка объектов...
Творю, значит, класс ObjectsChain. Каждый обект имеет ссылку на предыдущий и следующий обект, а также порядковый номер ($prev, $next, $order). Все, вроде, хорошо, цепочка делается, можно вставить новый обект в нужное место... Но ни как не могу сделать перемещение обекта по цепочке. Т. е. был он 2ым, переместить 4ым... Уже замучился, плз, помогите кто хоть ссылкой на похожее.
Вот так оно должно бы работать:
Примерно такова одна из попыток реализации. Явно корявая, ибо один елемент из цепочки пропадает 
Творю, значит, класс ObjectsChain. Каждый обект имеет ссылку на предыдущий и следующий обект, а также порядковый номер ($prev, $next, $order). Все, вроде, хорошо, цепочка делается, можно вставить новый обект в нужное место... Но ни как не могу сделать перемещение обекта по цепочке. Т. е. был он 2ым, переместить 4ым... Уже замучился, плз, помогите кто хоть ссылкой на похожее.
Вот так оно должно бы работать:
PHP:
$this->testAdd(); // create chain
$obj = $this->chain->getByOrder(2);
$obj->setValue('Moved');
$obj->moveTo(3);
$obj2 = $this->chain->getByOrder(3);
$this->assertEquals('Moved',$obj2->getValue());

PHP:
public function moveTo($order) {
if($this->order == $order) {
return true;
}
if($order > $this->order) {
$this->next->moveDown($this,$order);
}
if($order < $this->order) {
$this->moveUp($this,$order);
}
}
private function moveDown($obj,$order) {
$this->prev = $obj->getPrev();
$obj->addNext($this->next);
$this->next = $obj;
$obj->addPrev($this);
$this->order = $this->order-1;
$obj->setOrder($obj->getOrder()+1);
$obj->moveTo($order);
}
