我有一个生成列表的快速短代码..下面是短代码的外观......
[mainlist]
[listitem var1="" var2=""][/listitem]
[listitem var1="" var2=""][/listitem]
[listitem var1="" var2=""][/listitem]
[listitem var1="" var2=""][/listitem]
[/mainlist]
和另一个具有不同变量值的相同代码。
[mainlist]
[listitem var1="" var2=""][/listitem]
[listitem var1="" var2=""][/listitem]
[/mainlist]
我使用以下代码查找主列表中[listitem]的数量..
preg_match_all( '/(\[listitem (.*?)\](.*?)\[\/listitem\])/' , $content, $matches);
if(is_array($matches) && !empty($matches))
$total_items = count($matches[0]);
如果我回显结果它会向我显示4和0.它计算第一次出现的第二次出现,它简单显示为0,为什么是这样,我该如何改进这段代码。
感谢
答案 0 :(得分:0)
好的,我尝试复制你的代码,尽管我没有全部,但它似乎与你想要的东西相匹配。即使没有mainlist
标签。
$content = '
[mainlist]
[listitem var1="" var2=""][/listitem]
[listitem var1="" var2=""][/listitem]
[listitem var1="" var2=""][/listitem]
[listitem var1="" var2=""][/listitem]
[/mainlist]
[listitem var1="" var2=""][/listitem]
[listitem var1="" var2=""][/listitem]';
preg_match_all('/\[listitem(.*?)\](.*?)\[\/listitem\]/', $content, $matches);
print "<PRE><FONT COLOR=ORANGE>"; print_r($matches); print "</FONT></PRE>";
if(is_array($matches) && !empty($matches)) {
$total_items = count($matches[0]);
}
// THIS PRINTS 6
print "<BR>TOTAL ITEMS: ".$total_items;
因此,这让我认为问题是,正如米歇尔所建议的那样,你的mainlist
功能会引入内容。基本上,我认为你的问题的答案并不像你想的那样在REGEX部分,而是在构建列表项的部分开始。
检查以确保add_shortcode
函数正确构建mainlist
项。然后你的其余代码应该可以工作。