2012-10-10 56 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