Эффективный обход дерева для простого поиска

Я использую синтаксический анализатор MIB, который я написал, используя PHP для проекта веб-интерфейса SNMP, который я создаю.

Объект узла находится в текущей структуре:

class MibNode
{
public $name;
public $oid;
public $type;
public $status;
public $description;
public $canRead;
public $canWrite;
public $parent = null;
public $children = array();
}

Я пытаюсь получить объект узла по его имени.
Я написал рекурсивную функцию для этого:

public function getNodeByName($name)
{
if($this->name === $name)
{
return $this;
}
else
{
foreach($this->children as $child)
{
$node = $child->getNodeByName($name);
if($node != null)
return $node;
}
return null;
}
}

У меня есть некоторые проблемы с производительностью в моем проекте, поэтому я профилировал код и увидел, что эта функция вызывается ~ 106 000 раз.

Есть ли способ уменьшить количество вызовов этой функции или повысить производительность?

Полный код парсера доступен Вот.

редактировать: я профилировал использование функции с помощью инструмента профиля xdebug, результаты доступны Вот.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]