需要一些帮助制作 php 搜索树

Need some help making a php search tree

我正在制作一棵树来存储 php 中的单词和关联的数字数组。我需要它看起来像这样: 词:苹果、蚂蚁

[a] => Array
    (
        [p] => Array
            (
                [p] => Array
                    (
                        [l] => Array
                            (
                                [e] => Array
                                    (
                                        [0] => Array
                                            (
                                                [0] => 0
                                                [1] => 0
                                                [2] => 1
                                                [3] => 2
                                                [4] => 3
                                                [5] => 4
                                            )

                                    )

                            )

                    )

            )

        [n] => Array
            (
                [t] => Array
                    (
                        [0] => Array
                            (
                                [0] => 0
                                [1] => 1
                                [2] => 2
                                [3] => 0
                                [4] => 0
                                [5] => 4
                             )

                    )

           )

    )

当然apple和ant需要共享同一个[a]索引。我很接近,但我无法弄清楚如何正确跟踪树索引,因此 'apple' 可以很好地进入树,但 'ant' 被插入为 'nt'。这是我目前的代码:

private function insertWordsIntoTree()
{
    foreach ($this->words as $word)
    {
        $characters = preg_replace('/[0-9]+/', '', $words);

        $points = $this->getPoints($word);

        $this->tree = $this->buildTree($characters, $points, $this->tree);
    }

    print_r($this->tree);
}

private function buildTree($characters, array $points, array $tree)
{
    for ($i = 0; $i < strlen($characters); $i++) 
    {
        $character = $characters[$i];

        $remaining_characters = substr($characters, $i + 1);

        if (strlen($characters) === 1)
        {
            $child = [];

            $child[$character] = [$points];

            return $child;
        }
        elseif (!isset($tree[$character])) 
        {
            $tree[$character] = $this->buildTree($remaining_characters, $points, []);;

            break;
        }
        else
        {
            $this->buildTree($remaining_characters, $points, $tree[$character]);
        }
    }

    return $tree;
}

我很确定问题出在 else 语句中...我认为我没有正确跟踪当前的树索引。任何帮助将不胜感激。

这是将递归传递给 php 的简单方法:

$tree = array();
foreach($words as $word) {
    $characters = array_reverse(str_split($word));
    $temp = array();
    foreach($characters as $index => $character) {
        if($index == 0) {
            $temp[] = getPoints($word);
        }
        $temp = array(
            $character => $temp
        );
    }
    $tree = array_merge_recursive($tree, $temp);
}