Учитывая массив значений, соответствующих местоположению конечного узла, как мне получить доступ к указанному узлу? - PullRequest
0 голосов
/ 20 января 2012

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

Практический пример

Имеется такой массив:

Array
(
    [0] => 0
    [1] => 2
    [2] => 8
    [3] => 9
)

Узел дерева с ключом "9"будет найден в $tree[2][8][9] (с корнем 0).Учитывая вышеупомянутый массив, как мне построить оператор в PHP, который будет обращаться к конечному узлу?

Целевой код

/*
    Let's say I am given a $leafNodeID of 9, and I'd like to save some
    data ($dataToSave) into said leaf node
*/
$leafNodeID = 9;
$dataToSave = array("name" => "foobar");
$tree_path = $this->findPathToRootNode($tree, $leafNodeID);    // This returns the array found above.
${?????} = $dataToSave;     // <-- Here be dragons

Заранее спасибо!

Редактировать : Для тех, кому интересно, моя функция findPathToRootNode просто рекурсивно находит родительский узел и сохраняет его в формате массива, найденном выше.Если есть лучший способ представления указанных данных (особенно если это решит мою проблему), это было бы еще лучше.

Редактировать : при чтении кажется, что этот вопрос меньшедеревья, а точнее как получить доступ к массиву, учитывая его структуру в отдельном массиве.Пометка как таковая.

1 Ответ

0 голосов
/ 20 января 2012

Создайте функцию самонаведения. Это должно сделать трюк (не проверено)

function getLeaf($tree, $targetleaf, $depth = 0){
    if (isset($targetleaf[$depth+1])
        return getLeaf($tree[$targetleaf[$depth]], $targetleaf, $depth + 1)
    else
        return $tree[$depth];
}

При данных $tree, $tree путь к массиву, а $depth говорит сам за себя.

Вызовите функцию с помощью

$leaf = getLeaf($tree,$targetleaf);
...