我正在创建一个动态HTML分区,它根据从数据库接收的值将内容下拉为层次结构。 我将根据我从数据库收到的值给出一个示例。 结果集
ratings_dataframe['title'] = \
ratings_dataframe['movie_id'].map(movies.set_index('movie_id')['title'])
对于这个生成的Html应该是
ID Name ParentID
7 A 2
8 B 7
9 C 7
10 D 7
11 E 2
12 F 2
14 G 7
有人可以建议算法来实现这种结果。提前谢谢。
答案 0 :(得分:1)
我用Java编写了一个代码,但我认为编写C#代码不会成为一个问题。您可以测试我的代码here。我们的想法是将结果集映射到用下一个类表示的层次结构。
节点类:
<?php
$url = "http://store.steampowered.com/app/312660/";
// $file = __DIR__ . DIRECTORY_SEPARATOR . "cookie.txt";
// $postData = array(
// 'ageDay' => '31',
// 'ageMonth' => 'July',
// 'ageYear' => '1993'
// );
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13");
curl_setopt($ch,CURLOPT_POSTFIELDS,$postData);
// curl_setopt($ch,CURLOPT_COOKIESESSION, true);
// curl_setopt($ch,CURLOPT_COOKIEJAR,$file);
// curl_setopt($ch,CURLOPT_COOKIEFILE,$file);
$strCookie = 'mature_content=' . 1 . '; path=/';
curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
echo $data;
?>
一些助手类只是为了清洁代码:
class Node {
private String name;
private List<Node> children;
Node(String name) {
this.name = name;
children = new ArrayList<>();
}
void addChild(Node child) {
children.add(child);
}
List<Node> getChildren() {
return children;
}
public String toString() {
return this.name;
}
}
层次结构模拟(我还为演示添加了其他级别):
class Tag {
private String open;
private String close;
Tag(String open, String close) {
this.open = open;
this.close = close;
}
String open() {
return open;
}
String close() {
return close;
}
}
一个主要逻辑。我使用递归来遍历我的数据结构:
private static List<Node> createHierarchy() {
List<Node> nodes = new ArrayList<>();
Node nodeA = new Node("A");
Node nodeB = new Node("B");
Node nodeC = new Node("C");
Node nodeD = new Node("D");
Node nodeE = new Node("E");
Node nodeF = new Node("F");
Node nodeG = new Node("G");
Node node1 = new Node("1");
Node node2 = new Node("2");
Node node3 = new Node("3");
Node node4 = new Node("4");
nodeA.addChild(nodeB);
nodeA.addChild(nodeC);
nodeD.addChild(node1);
nodeD.addChild(node2);
node2.addChild(node3);
node2.addChild(node4);
nodeA.addChild(nodeD);
nodeA.addChild(nodeE);
nodes.add(nodeA);
nodes.add(nodeF);
nodes.add(nodeG);
return nodes;
}
结果:
public static void main(String[] args) {
printHierarchy(createHierarchy(), new StringBuilder());
}
private static void printHierarchy(List<Node> nodes, StringBuilder stringBuilder) {
stringBuilder.append(ul.open());
for (Node node : nodes) {
printNode(node, stringBuilder);
printChildren(node.getChildren(), stringBuilder);
stringBuilder.append(li.close());
}
stringBuilder.append(ul.close());
System.out.print(stringBuilder.toString());
}
private static void printNode(Node node, StringBuilder stringBuilder) {
stringBuilder.append(li.open()).append(node);
}
private static void printChildren(List<Node> children, StringBuilder stringBuilder) {
if (children.size() == 0) {
return;
}
stringBuilder.append(ul.open());
for (Node child : children) {
stringBuilder.append(li.open()).append(child);
if (child.getChildren().size() > 0) {
printChildren(child.getChildren(), stringBuilder);
}
stringBuilder.append(li.close());
}
stringBuilder.append(ul.close());
}
答案 1 :(得分:0)
以ParentID = null开头。
获取ParentID与您的ParentID匹配的所有项目,检查下一个子级别是否有多个项目;如果有,请将它们包装在-tag中。
然后遍历所有项目,追加项目并递归处理其子级别。
如果您不再获得与您的ParentID匹配的项目,则会到达终端节点。
另外,不要忘记关闭打开的标签。