为什么推送数组不会持久化?

时间:2016-01-04 08:48:10

标签: php

我正在尝试用线性路径构建嵌套树, 我所拥有的路径是从父母到孩子的分类,如下所示:

$paths= array(array(999, 10, 9, 8, 7), array(999, 10, 9, 82, 75), array(999, 10, 9, 83, 74));

其中10是999的孩子,9是10的孩子,8是9的孩子等。

tree_root有999个id,它将显示树的顶部节点。

$tree_root = array('id' => 999, 'nodes' => array());

我遇到的问题是buildTree不会将持久的新子项添加到tree_root中,插入只能在tree_root直接子项中使用,tree_root的子项中子项内的任何插入节点都将从buildTree函数返回后不存在,任何想法如何保留引用并解决这个问题?

// loop of sorted paths:
for ($i = 0; $i < count($paths); $i++) {
  for ($l = 0; $l < count($paths[$i]) - 1; $l++) {
    $this->buildTree($tree_root, $paths[$i][$l], $paths[$i][$l + 1]);
  }
}

public function buildTree(&$a, $parent_id, $child_id)
    {
        if ($a["id"] == $parent_id) {
            $exists = false;
            for ($i = 0; $i < count($a["nodes"]); $i++) {
                if ($a["nodes"][$i]["id"] == $child_id) {
                    $exists = true;
                    break;
                }
            }
            if (!$exists) {
                $node_template_children = array();
                $node_template = array('id' => $child_id, 'nodes' => &$node_template_children);
                $node_template = &$node_template;
                $a_nodes = &$a["nodes"];

                // $a_nodes is not affected when returning from buildTree!!
                array_push($a_nodes, $node_template); 
            }
            return true;
        }
        foreach ($a["nodes"] as $node) {
            $result = $this->buildTree($node, $parent_id, $child_id);
            if ($result == true) {
                return true;
            }
        }
        return false;
    }

0 个答案:

没有答案