我一直在研究一个输出数据库中所有类别的catagory系统。
因为我正在拉动无限的分类(理论上),我有时会有<ul>
个不包含<li>
元素的元素(或其他任何内容,除了空格)
我目前正在使用jQuery来过滤这些<ul>
元素,但正如您有意认为这不是最有效的方法。
我一直试图制作正则表达式,以便用空字符串替换这些空的<ul>
元素,但到目前为止我还没有多少运气。
<ul class="nav navbar-nav catagory" style="display:none;">
</ul>
上面的HTML是我需要过滤掉的空<ul>
的示例。
到目前为止,我有这个正则表达式声明,但它没有按预期工作。
$str = '<ul class="nav navbar-nav catagory" style="display:none;"> </ul>';
preg_match('!\<ul\>/ +/\<\/ul\>!', $str, $matches);
任何人都可以帮助我吗?
此类内容也存储在PHP内的变量中。
编辑:
由于Josh Beam,我解决了这个问题,我编辑了我的功能,其中的数据库是从数据库中删除的:
function build_catagory($parent, $row = NULL)
{
global $db, $template;
// Initialise array
$data = array();
// Next level parent
$next = $parent + 1;
// Basic SQL statement
$sql = "SELECT * FROM Rubriek";
// Where condition based on $row
if(is_null($row))
{
$where = " WHERE Hoofdrubriek IS NULL";
}
else
{
$where = " WHERE Hoofdrubriek = '" . $row['Rubrieknummer'] . "'";
}
// Execute query
$stmt = $db->query($sql . $where);
if($stmt)
{
// Create new instance of template engine (set output to false)
$catagory = new Template('{', '}', array('content'), FALSE);
// Load template
$catagory->load(T_TEMPLATE_PATH . '/rubrieken.html', 'content');
// Fetch results
while($row = $db->fetch($stmt))
{
$data[] = array(
'CATAGORY_NAME' => ucfirst(strtolower($row['Rubrieknaam'])),
'CATAGORY' => build_catagory($next, $row),
);
}
// Assign data to the template
$catagory->assign_vars(array(
'CATAGORIES' => $data,
'CATAGORIES_DISPLAY' => ($parent == 0 ? '' : 'style="display:none;"'),
));
// Return catagory
return $catagory->parse();
}
else
{
return '';
}
}
实际上修复非常简单,只需重新设置空字符串而不是模板中的解析。 谢谢你的帮助!
答案 0 :(得分:1)
这里强制执行的重要一点是列表打开和关闭标记之间只有空格。由于我们不解析任何分层数据,因此正则表达式可以有效地完成。
更易读的解决方案:
\<ul[^\>]*\>\s*\<\/ul\>
稍微更安全的版本会在流氓空格的情况下使用更多\s*
:
\<\s*ul[^\>]*\>\s*\<\s*\/ul\s*\>