2012-10-10 51 views
0

我对学校的两名家庭作业问题,我已经看过了他们几次,没有得到它树阵到站点地图

我有这样的阵列

数组[10] [10] [10 ]

id parent value 
1 0  X 
2 1  Y 
3 1  Z 
4 3  A 
5 2  B 
6 5  C 
7 3  D 
8 9  E 
9 4  F 
10 2  G 

我想要的是生成一个基于父列的站点地图。

Example 
1 must be at the root 
2 and 3 must be childs of 1 
10 and 5 must be childs of 2 
... and so on. 

我想如果我能产生这样

<object id="1" value="X"> 
    <object id="2" value="Y"> 
     <object id="10" value="G"> 
     </object> 
     <object id="5" value="B"> 
     </object> 

     ... and so on ... 

    </object> 
</object> 

的.xml和阵列

array(
    id = > 1 
    array 
); 

我不看它是如何工作实际看,也许是这样的

$array = array(
    "foo" => "bar", 
    42 => 24, 
    "multi" => array(
     "dimensional" => array(
      "array" => "foo" 
     ) 
    ) 
); 

和第二个概率我以后会发布它。我为此使用PHP,但C++和C#也可以工作,因为算法很重要。任何帮助都会令人满意,因为我对此很好奇!

+0

你不需要任何复杂的事情。具有父级和值的简单单维结构应该是所有必需的。你的域名有一个好处,那就是ID是连续的,并且从一开始,所以ar [n-1]这里的n是id会引导你到节点本身,所有n> 0。 – WhozCraig

+0

快速上..是你的阵列在这种格式'阵列(“id”=> 1,“父母”=> 0,“价值”=>“X”)' – Baba

+0

嘿谢谢,但现在我正在代码,我想我需要使用类和对象 – Master345

回答

1

我相信你的阵列看起来像这样

$list = array(); 
$list[] = array("id" => 1,"parent" => 0,"value" => "X"); 
$list[] = array("id" => 2,"parent" => 1,"value" => "Y"); 
$list[] = array("id" => 3,"parent" => 1,"value" => "Z"); 
$list[] = array("id" => 4,"parent" => 3,"value" => "A"); 
$list[] = array("id" => 5,"parent" => 2,"value" => "B"); 
$list[] = array("id" => 6,"parent" => 5,"value" => "C"); 
$list[] = array("id" => 7,"parent" => 3,"value" => "D"); 
$list[] = array("id" => 8,"parent" => 9,"value" => "E"); 
$list[] = array("id" => 9,"parent" => 4,"value" => "F"); 
$list[] = array("id" => 10,"parent" => 2,"value" => "G"); 

您可以尝试

$xml = new SimpleXMLElement("<data />"); 
startBuild($list, $xml); 
header("Content-Type: text/xml"); 
echo $xml->asXML(); 

输出

<?xml version="1.0"?> 
<data> <object id="1" value="X"> 
    <object id="2" value="Y"> 
     <object id="5" value="B"> 
      <object id="6" value="C" /> 
     </object> 
     <object id="10" value="G" /> 
    </object> 
    <object id="3" value="Z"> 
     <object id="4" value="A"> 
      <object id="9" value="F"> 
       <object id="8" value="E" /> 
      </object> 
     </object> 
     <object id="7" value="D" /> 
    </object> 
</object> 
</data> 

功能用于

function startBuild(array $array, SimpleXMLElement $xml, $no = 0) { 
    $child = hasChildren($array, $no); 
    if (empty($child)) 
     return ""; 

    foreach ($child as $value) { 
     $xChild = $xml->addChild("object"); 
     $xChild->addAttribute("id", $value['id']); 
     $xChild->addAttribute("value", $value['value']); 
     startBuild($array, $xChild, $value['id']); 
    } 
    return true; 
} 

function hasChildren($array, $id) { 
    return array_filter($array, function ($var) use($id) { 
     return $var['parent'] == $id; 
    }); 
} 
+0

哇,伟大的职位,让我研究它一点点:D – Master345

+0

它完美的作品,但我仍然试图100%理解它,但你可以看看我的代码http://codepad.org/jtEj6c2S我使用类和对象,你能帮助我吗? – Master345

+0

你的代码不会说糊状..你只是输出id,父母和值 – Baba