如何创建一个将数组显示为树的函数?

时间:2016-03-22 19:10:15

标签: php

如何创建一个将数组显示为树的函数。例如,我想获得一个我想要走的决策树,直到我根据分支的值到达叶子。我像下面那样创建树:

 $tree= new DS_Tree();
 $node=array('name' => 'start');

 $tree->insert_node($node);
 $tree->goto_root();

  $mytree = new id3();
  $mytree->init($data_array_AttrList,$data_array_values,$data_class,$data_array_instances,$tree); 
  $mytree->run();
  echo '<pre class="brush: php">';
        print_r($mytree->tree->draw_tree());
  echo '</pre>';

函数draw_tree()是:

public function draw_tree() {
    return $this->nodes;
}

创建我的树的功能是:

private function make_tree($attr) {
    foreach($this->Values[$attr] as $v) {
        $subset = $this->get_subset($attr, $v);
        if($the_class = $this->has_same_class($subset)) {
            $node =array(
                'name' => $attr,
                 'arc' => $v

           );
            $this->tree->insert_node($node);

            $this->Instance = array_diff_key($this->Instance, $subset); 
        } else {
            $node =array(
                'name' => $this->Classa,
                'arc' => $v
            );

            $unresolved = $this->tree->insert_node($node);
       }
    }

    if (isset($unresolved)) {

        $this->tree->goto_index($unresolved);

    }

    }
}

结果是:

Array
(
[0] => Array
    (
        [name] => Time
        [parent] => 
        [children] => Array
            (
                [0] => 1
            )

    )

[1] => Array
    (
        [name] => Focus
        [arc] => Array
            (
                [0] => 2 day/week
                [1] => 3 day/week
                [2] => 4 day/week
                [3] => 5 day/week
                [4] => 6 day/week
            )

        [parent] => 0
        [children] => Array
            (
                [0] => 2
            )

    )

[2] => Array
    (
        [name] => Dificulty
        [arc] => Array
            (
                [0] => Weght loss
                [1] => Mantain weight
                [2] => Gain Mass
            )

        [parent] => 1
        [children] => Array
            (
                [0] => 3
            )

    )

[3] => Array
    (
        [name] => Sex
        [arc] => Array
            (
                [0] => Beginner
                [1] => Intermediar
                [2] => Advance
            )

        [parent] => 2
        [children] => Array
            (
                [0] => 4
            )

    )

[4] => Array
    (
        [name] => Array
            (
                [Exercise] => Array
                    (
                        [0] => Array
                            (
                                [0] => Ex1  
                                [1] => Ex2
                                [2] => Ex3
                                [3] => Ex4
                                [4] => Ex5

                            )

                    )

            )

        [arc] => Array
            (
                [0] => F
                [1] => M
            )

        [parent] => 3
    )

)

2 个答案:

答案 0 :(得分:1)

只是将数组显示为树:

echo "<pre>";
var_dump($array);
echo "</pre>";

答案 1 :(得分:0)

这是一种迭代这个数据结构并寻找某个值的方法:

function recurseFind($tree, $find, $path = "") {
    if (!is_array($tree)) {
        // it is a leaf:
        if ($tree === $find) {
             return $path; // return path where we found it
        }
        return false;
    }
    foreach($tree as $key => $value) {
        $result = recurseFind($value, $find, $path . (is_numeric($key) ? "[$key]" : "['$key']"));
        if ($result !== false) return $result;
    }
    return false;
}

对于您提供的样本输入,如果您这样称呼它:

echo recurseFind($tree, "Mantain weight", '$tree');

以可在PHP中评估的格式输出该值的“位置”(仅限第一个匹配项):

$tree[2]['arc'][1]