我正在尝试构建一个模式来存储网站导航地图。将典型的数据集想象成一个站点地图,其中页面可以有子页面,而这些子页面可以有更多的子页面。一个例子是以下对象:
$tree = array(
'home' => array(
'h1' => 'test',
'h2' => 'test2',
'copy' => 'copy here',
'slug' => '',
'children' => array(
'blah' => array(
'h1' => 'child1',
'h2' => 'child1',
'copy' => 'child copy here',
'slug' => 'blah',
'children' => array(
'blahsub' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'blahsub',
'children' => array(
'subsubchild1' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild1'
)
)
),
'subchild2' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'subchild2',
'children' => array(
'subsubchild2' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild2'
)
)
),
'subchild3' => array(
'h1' => 'subchild1',
'h2' => 'subchild2',
'copy' => 'child copy here',
'slug' => 'subchild3',
'children' => array(
'subsubchild3' => array(
'h1' => 'subsubchild1',
'h2' => 'subsubchild2',
'copy' => 'child copy here',
'slug' => 'subsubchild3'
)
)
)
)
),
'another' => array(
'h1' => 'child2',
'h2' => 'child2',
'copy' => 'child copy here',
'slug' => 'another'
)
)
)
);
$tree 的每一层都由它的 URI 索引,每一层都可以包含 N 个子节点,所有子节点本身都可以有子节点。
我最初的想法是使用这个模式很直观,但是我不确定查询树的特定节点。我接近这个模式错了吗?(目标是不必进行多次查询以在每个请求上“构建”这样的树,而是将其拉一次并在内存中使用它。
注意:我仍然可以查询拉整个树,然后通过下标运算符直接访问每个节点。这应该比对树的多个查询提供更好的性能。目前为此使用mysql,这是一个真正的瓶颈。
请分享您对这个架构的意见,如果有不清楚的地方,请要求澄清。
谢谢!
注意 - 主要目标:我想通过它们的“索引”(也是每个节点的“slug”参数)在树中查找项目。我真的不知道从哪里开始——这样的查询功能是否存在?必须在具有多个查询的循环中完成吗?