我有一个MySQL表,其中包含我构建的自定义CMS的内容。
有许多列,但处理路径的列是:
我编写了一个函数,它将特定页面的所有子页都放入数组中,另一个函数将它们输出到li元素中。
function get_subpages($path) {
$GetSubpages=mysql_query("SELECT * FROM content WHERE parentpath='$path'");
while ( $SubpageLoop = mysql_fetch_assoc($GetSubpages) ) {
$Subpages[] = $SubpageLoop;
}
unset($GetSubpages);
return $Subpages;
}和
function list_subpages($path) {
$Subpages=get_subpages($path);
if ($Subpages) {
$Output="";
foreach($Subpages as $Subpage) {
$Output .= '<li><a href="'.$Subpage[path].'">'.$Subpage[title].'</a></li>';
}
}
return $Output;
}但是,我想让函数操作,以便生成的数组是分层的,对应于页面结构,以及生成的HTML列表。
我在SQL查询中尝试使用不同的操作符,然后创建一个辅助循环,然后得到每个结果的子页面,但没有什么好的结果。
mysql_query("SELECT DISTINCT parentpath FROM content WHERE parentpath LIKE '$path%' ORDER BY path ASC");我还开始使用一个preg_match来捕获中间带有斜杠的任何项,然后使用数组结果之一运行另一个查询,但是还无法确切地知道如何使它以我想要的方式工作。
preg_match ( "/^(.*)\/(.*)\//", $ParentLevel, $Matches );我只是很难拼凑在一起。有人能帮我吗?
发布于 2015-06-22 21:13:39
弄明白了:
function has_immediate_children($path) {
$path=sanitize($path);
$GetImmediateChildren=mysql_query("SELECT path FROM content WHERE parentpath='$path' ORDER BY path ASC");
if ( mysql_num_rows($GetImmediateChildren)>0) { return true; }
else { return false; }
}
function get_immediate_children($path) {
$path=sanitize($path);
$GetImmediateChildren=mysql_query("SELECT * FROM content WHERE parentpath='$path' ORDER BY path ASC");
while ( $ImmediateChildrenLoop = mysql_fetch_assoc($GetImmediateChildren) ) {
$ImmediateChildren[]=$ImmediateChildrenLoop;
}
return $ImmediateChildren;
}
function get_all_subpages($path) {
$path=sanitize($path);
$ImmediateChildren=get_immediate_children($path);
echo '<ul>';
foreach ($ImmediateChildren as $ImmediateChild) {
echo '<li><a href="'.$ImmediateChild[path].'">'.$ImmediateChild[title].'</a></li>';
if ( has_immediate_children($ImmediateChild[path]) ) {
get_all_subpages($ImmediateChild[path]);
}
}
echo '</ul>';
}https://stackoverflow.com/questions/30985423
复制相似问题