【问题标题】:Tree Array to sitemap树数组到站点地图
【发布时间】:2012-10-10 18:35:04
【问题描述】:

我有两个学校作业问题,我看了好几遍都没弄明白

我有这个数组

数组[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.

如果我可以生成类似的 .xml 文件,我希望

<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>

还有一个数组

array(
    id = > 1
    array
);

我不看它实际上的样子,也许是这样的

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

第二个问题我稍后会发布。我为此使用 PHP,但 C++ 和 C# 也可以,因为算法很重要。任何帮助都将不胜感激,因为我对此非常好奇!

【问题讨论】:

  • 你不需要任何复杂的东西。只需要一个简单的单维结构,即具有父级和值。你所在的域的好处是 id 是连续的并且从一个开始,所以 ar[n-1] ,其中 n 是 id 将引导你到所有 n > 0 的节点本身。希望这是有道理的。跨度>
  • 快点……你的数组是这种格式的array("id"=&gt;1,"parent"=&gt;0,"value"=&gt;"X")
  • 嘿,谢谢,但现在我正在编写代码,我想我需要使用类和对象

标签: c# php c++ arrays


【解决方案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;
    });
}

【讨论】:

  • 它工作得很好,但我仍然试图 100% 理解它,但你能看看我的代码codepad.org/jtEj6c2S 我正在使用类和对象,你能帮我解决这个问题吗?
  • 你的代码没有说 mush .. 你只是在输出 id、parent 和 value
  • 我不知道如何制作,基本上我想使用对象(我的老师想要这个)codepad.org/Q8QvKARJ,接下来我该怎么做?我会将您的回复作为答案,因为这是一个很好的回复,但是您能帮我按我的方式做吗?谢谢你:D
  • 这很容易。 .我什至可以让它与对象和数组一起工作。 ..我怎么看
  • 我不知道下一步该做什么,我正在研究类和对象,这是作业的建议,即使您的示例运行良好:D
猜你喜欢
  • 2013-01-07
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2010-09-05
  • 1970-01-01
相关资源
最近更新 更多